From 14a027911f1371d05dd82b2cf4b6a4ef47766c29 Mon Sep 17 00:00:00 2001 From: klingbolt Date: Fri, 5 Jan 2024 00:22:19 -0500 Subject: [PATCH 01/11] Added argument for copying files and standardized proto reading --- xml_converter/src/packaging_protobin.cpp | 2 +- xml_converter/src/xml_converter.cpp | 63 +++++++++++++++++++++--- 2 files changed, 56 insertions(+), 9 deletions(-) diff --git a/xml_converter/src/packaging_protobin.cpp b/xml_converter/src/packaging_protobin.cpp index 337c74ef..3d31b090 100644 --- a/xml_converter/src/packaging_protobin.cpp +++ b/xml_converter/src/packaging_protobin.cpp @@ -251,7 +251,7 @@ void write_protobuf_file_per_map_id( } for (auto iterator = mapid_to_category_to_pois.begin(); iterator != mapid_to_category_to_pois.end(); iterator++) { - string output_filepath = join_file_paths(proto_directory, to_string(iterator->first) + ".data"); + string output_filepath = join_file_paths(proto_directory, to_string(iterator->first) + ".bin"); _write_protobuf_file( output_filepath, diff --git a/xml_converter/src/xml_converter.cpp b/xml_converter/src/xml_converter.cpp index 96e02865..dc3b43ae 100644 --- a/xml_converter/src/xml_converter.cpp +++ b/xml_converter/src/xml_converter.cpp @@ -77,7 +77,7 @@ void move_supplementary_files(string input_directory, string output_directory) { } move_supplementary_files(path, new_directory); } - else if (has_suffix(filename, ".trl") || has_suffix(filename, ".xml")) { + else if (has_suffix(filename, ".trl") || has_suffix(filename, ".xml") || has_suffix(filename, ".bin")) { continue; } else { @@ -105,6 +105,21 @@ void read_taco_directory(string input_path, map* marker_catego } } +void read_burrito_directory(string input_path, map* marker_categories, vector* parsed_pois) { + if (!filesystem::exists(input_path)) { + cout << "Error: " << input_path << " is not an existing directory or file" << endl; + } + else if (filesystem::is_directory(input_path)) { + vector burrito_files = get_files_by_suffix(input_path, ".bin"); + for (const string& path : burrito_files) { + read_protobuf_file(path, marker_categories, parsed_pois); + } + } + else if (filesystem::is_regular_file(input_path)) { + read_protobuf_file(input_path, marker_categories, parsed_pois); + } +} + void write_taco_directory(string output_path, map* marker_categories, vector* parsed_pois) { // TODO: Exportion of XML Marker Packs File Structure #111 if (!filesystem::is_directory(output_path)) { @@ -132,7 +147,8 @@ void process_data( // This is a special output path used for burrito internal use that splits // the waypoint protobins by map id. - string output_split_waypoint_dir) { + string output_split_waypoint_dir, + bool move_files_to_output) { // All of the loaded pois and categories vector parsed_pois; map marker_categories; @@ -146,10 +162,20 @@ void process_data( &marker_categories, &parsed_pois); - // TODO: This is wildly incorrect now because we might have a - // different output directory then output_split_waypoint_dir - if (output_split_waypoint_dir != "") { - move_supplementary_files(input_taco_paths[i], output_split_waypoint_dir); + if (move_files_to_output) { + if (output_split_waypoint_dir != "") { + move_supplementary_files(input_taco_paths[i], output_split_waypoint_dir); + } + if (output_taco_paths.size() != 0) { + for (size_t j = 0; j < output_taco_paths.size(); j++) { + move_supplementary_files(input_taco_paths[i], output_taco_paths[j]); + } + } + if (output_waypoint_paths.size() != 0) { + for (size_t j = 0; j < output_waypoint_paths.size(); j++) { + move_supplementary_files(input_taco_paths[i], output_waypoint_paths[j]); + } + } } } auto end = chrono::high_resolution_clock::now(); @@ -160,10 +186,26 @@ void process_data( // Read in all the protobin waypoint markerpacks for (size_t i = 0; i < input_waypoint_paths.size(); i++) { cout << "Loading waypoint pack " << input_waypoint_paths[i] << endl; - read_protobuf_file( + read_burrito_directory( input_waypoint_paths[i], &marker_categories, &parsed_pois); + + if (move_files_to_output) { + if (output_split_waypoint_dir != "") { + move_supplementary_files(input_waypoint_paths[i], output_split_waypoint_dir); + } + if (output_taco_paths.size() != 0) { + for (size_t j = 0; j < output_taco_paths.size(); j++) { + move_supplementary_files(input_waypoint_paths[i], output_taco_paths[j]); + } + } + if (output_waypoint_paths.size() != 0) { + for (size_t j = 0; j < output_waypoint_paths.size(); j++) { + move_supplementary_files(input_waypoint_paths[i], output_waypoint_paths[j]); + } + } + } } // Write all of the xml taco paths @@ -212,6 +254,7 @@ int main(int argc, char* argv[]) { vector output_taco_paths; vector input_waypoint_paths; vector output_waypoint_paths; + bool move_files_to_output = false; // Typically "~/.local/share/godot/app_userdata/Burrito/protobins" for // converting from xml markerpacks to internal protobuf files. @@ -238,6 +281,9 @@ int main(int argc, char* argv[]) { // CLI arg parsing later to properly capture this. arg_target = &output_split_waypoint_paths; } + else if (!strcmp(argv[i], "--copy-images")) { + move_files_to_output = true; + } else { arg_target->push_back(argv[i]); } @@ -258,7 +304,8 @@ int main(int argc, char* argv[]) { input_waypoint_paths, output_taco_paths, output_waypoint_paths, - output_split_waypoint_dir); + output_split_waypoint_dir, + move_files_to_output); return 0; } From 251d775a6fb3d3c28b542d52b8aa55a1ed7e4c3c Mon Sep 17 00:00:00 2001 From: klingbolt Date: Fri, 5 Jan 2024 00:36:00 -0500 Subject: [PATCH 02/11] removing the copying argument --- xml_converter/src/xml_converter.cpp | 54 ++++++++++++----------------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/xml_converter/src/xml_converter.cpp b/xml_converter/src/xml_converter.cpp index dc3b43ae..b1a54625 100644 --- a/xml_converter/src/xml_converter.cpp +++ b/xml_converter/src/xml_converter.cpp @@ -147,8 +147,7 @@ void process_data( // This is a special output path used for burrito internal use that splits // the waypoint protobins by map id. - string output_split_waypoint_dir, - bool move_files_to_output) { + string output_split_waypoint_dir) { // All of the loaded pois and categories vector parsed_pois; map marker_categories; @@ -162,19 +161,17 @@ void process_data( &marker_categories, &parsed_pois); - if (move_files_to_output) { - if (output_split_waypoint_dir != "") { - move_supplementary_files(input_taco_paths[i], output_split_waypoint_dir); - } - if (output_taco_paths.size() != 0) { - for (size_t j = 0; j < output_taco_paths.size(); j++) { - move_supplementary_files(input_taco_paths[i], output_taco_paths[j]); - } + if (output_split_waypoint_dir != "") { + move_supplementary_files(input_taco_paths[i], output_split_waypoint_dir); + } + if (output_taco_paths.size() != 0) { + for (size_t j = 0; j < output_taco_paths.size(); j++) { + move_supplementary_files(input_taco_paths[i], output_taco_paths[j]); } - if (output_waypoint_paths.size() != 0) { - for (size_t j = 0; j < output_waypoint_paths.size(); j++) { - move_supplementary_files(input_taco_paths[i], output_waypoint_paths[j]); - } + } + if (output_waypoint_paths.size() != 0) { + for (size_t j = 0; j < output_waypoint_paths.size(); j++) { + move_supplementary_files(input_taco_paths[i], output_waypoint_paths[j]); } } } @@ -191,19 +188,17 @@ void process_data( &marker_categories, &parsed_pois); - if (move_files_to_output) { - if (output_split_waypoint_dir != "") { - move_supplementary_files(input_waypoint_paths[i], output_split_waypoint_dir); - } - if (output_taco_paths.size() != 0) { - for (size_t j = 0; j < output_taco_paths.size(); j++) { - move_supplementary_files(input_waypoint_paths[i], output_taco_paths[j]); - } + if (output_split_waypoint_dir != "") { + move_supplementary_files(input_waypoint_paths[i], output_split_waypoint_dir); + } + if (output_taco_paths.size() != 0) { + for (size_t j = 0; j < output_taco_paths.size(); j++) { + move_supplementary_files(input_waypoint_paths[i], output_taco_paths[j]); } - if (output_waypoint_paths.size() != 0) { - for (size_t j = 0; j < output_waypoint_paths.size(); j++) { - move_supplementary_files(input_waypoint_paths[i], output_waypoint_paths[j]); - } + } + if (output_waypoint_paths.size() != 0) { + for (size_t j = 0; j < output_waypoint_paths.size(); j++) { + move_supplementary_files(input_waypoint_paths[i], output_waypoint_paths[j]); } } } @@ -254,7 +249,6 @@ int main(int argc, char* argv[]) { vector output_taco_paths; vector input_waypoint_paths; vector output_waypoint_paths; - bool move_files_to_output = false; // Typically "~/.local/share/godot/app_userdata/Burrito/protobins" for // converting from xml markerpacks to internal protobuf files. @@ -281,9 +275,6 @@ int main(int argc, char* argv[]) { // CLI arg parsing later to properly capture this. arg_target = &output_split_waypoint_paths; } - else if (!strcmp(argv[i], "--copy-images")) { - move_files_to_output = true; - } else { arg_target->push_back(argv[i]); } @@ -304,8 +295,7 @@ int main(int argc, char* argv[]) { input_waypoint_paths, output_taco_paths, output_waypoint_paths, - output_split_waypoint_dir, - move_files_to_output); + output_split_waypoint_dir); return 0; } From 9ad280d75eea13d0c34d6a895625044afb41c5e7 Mon Sep 17 00:00:00 2001 From: klingbolt Date: Thu, 11 Jan 2024 23:04:15 -0500 Subject: [PATCH 03/11] Added textures to proto reader state --- .../texture/input/pack/my_texture.png | Bin 0 -> 5881 bytes .../texture/input/pack/my_texture2.png | Bin 0 -> 13277 bytes .../input/pack/somedir/my_texture3.png | Bin 0 -> 13277 bytes .../texture/output_proto/my_texture.png | Bin 0 -> 5881 bytes .../texture/output_proto/my_texture2.png | Bin 0 -> 13277 bytes .../output_proto/somedir/my_texture3.png | Bin 0 -> 13277 bytes .../texture/output_xml/my_texture.png | Bin 0 -> 5881 bytes .../texture/output_xml/my_texture2.png | Bin 0 -> 13277 bytes .../output_xml/somedir/my_texture3.png | Bin 0 -> 13277 bytes xml_converter/src/Imbiber.py | 17 ++++ xml_converter/src/attribute/image.cpp | 34 ++++++-- xml_converter/src/packaging_protobin.cpp | 22 ++--- xml_converter/src/packaging_protobin.hpp | 3 +- xml_converter/src/packaging_xml.cpp | 29 +++---- xml_converter/src/packaging_xml.hpp | 3 +- .../src/state_structs/proto_reader_state.hpp | 8 ++ .../src/state_structs/xml_reader_state.hpp | 4 +- xml_converter/src/xml_converter.cpp | 76 +++++++++--------- 18 files changed, 121 insertions(+), 75 deletions(-) create mode 100644 xml_converter/integration_tests/test_cases/texture/input/pack/my_texture.png create mode 100644 xml_converter/integration_tests/test_cases/texture/input/pack/my_texture2.png create mode 100644 xml_converter/integration_tests/test_cases/texture/input/pack/somedir/my_texture3.png create mode 100644 xml_converter/integration_tests/test_cases/texture/output_proto/my_texture.png create mode 100644 xml_converter/integration_tests/test_cases/texture/output_proto/my_texture2.png create mode 100644 xml_converter/integration_tests/test_cases/texture/output_proto/somedir/my_texture3.png create mode 100644 xml_converter/integration_tests/test_cases/texture/output_xml/my_texture.png create mode 100644 xml_converter/integration_tests/test_cases/texture/output_xml/my_texture2.png create mode 100644 xml_converter/integration_tests/test_cases/texture/output_xml/somedir/my_texture3.png create mode 100644 xml_converter/src/Imbiber.py diff --git a/xml_converter/integration_tests/test_cases/texture/input/pack/my_texture.png b/xml_converter/integration_tests/test_cases/texture/input/pack/my_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..56c45ea1f83feb7fa9ecdffe6a7c6396594a4dce GIT binary patch literal 5881 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 zalhTfG3NGg59vzvu<2yzvj6}9000000000000000000000000009fK52X{qEXnJy< P00000NkvXXu0mjfm(VbP literal 0 HcmV?d00001 diff --git a/xml_converter/integration_tests/test_cases/texture/input/pack/my_texture2.png b/xml_converter/integration_tests/test_cases/texture/input/pack/my_texture2.png new file mode 100644 index 0000000000000000000000000000000000000000..21a80261d86c0235b084608c7558c247f3968707 GIT binary patch literal 13277 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 zalhTfG3NGg59vzvu<2yzvj6}9000000000000000000000000009fK52X{qEXnJy< P00000NkvXXu0mjfm(VbP literal 0 HcmV?d00001 diff --git a/xml_converter/integration_tests/test_cases/texture/output_proto/my_texture2.png b/xml_converter/integration_tests/test_cases/texture/output_proto/my_texture2.png new file mode 100644 index 0000000000000000000000000000000000000000..21a80261d86c0235b084608c7558c247f3968707 GIT binary patch literal 13277 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 zalhTfG3NGg59vzvu<2yzvj6}9000000000000000000000000009fK52X{qEXnJy< P00000NkvXXu0mjfm(VbP literal 0 HcmV?d00001 diff --git a/xml_converter/integration_tests/test_cases/texture/output_xml/my_texture2.png b/xml_converter/integration_tests/test_cases/texture/output_xml/my_texture2.png new file mode 100644 index 0000000000000000000000000000000000000000..21a80261d86c0235b084608c7558c247f3968707 GIT binary patch literal 13277 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 +#include #include #include #include "../rapid_helpers.hpp" #include "../rapidxml-1.13/rapidxml.hpp" -#include "waypoint.pb.h" +#include "../string_helper.hpp" using namespace std; +namespace fs = std::filesystem; //////////////////////////////////////////////////////////////////////////////// // parse_image @@ -21,8 +22,19 @@ void xml_attribute_to_image( XMLReaderState* state, Image* value, bool* is_set) { - value->filename = get_attribute_value(input); - value->original_filepath = state->xml_filedir + "/" + value->filename; + Image image; + image.filename = get_attribute_value(input); + image.original_filepath = join_file_paths(state->xml_filedir, image.filename); + if (fs::exists(fs::path(image.original_filepath))) { + for (const string& path : state->all_output_dirs) { + fs::path output_path = fs::path(path) / image.filename; + if (!fs::exists(output_path)) { + fs::create_directories(output_path.parent_path()); + fs::copy_file(fs::path(image.original_filepath), output_path); + } + } + } + *value = image; *is_set = true; } @@ -48,9 +60,19 @@ void proto_to_image( ProtoReaderState* state, Image* value, bool* is_set) { - // TODO: this is broken until we load the string index into the proto read state Image image; - // image.path = input.path(); + image.filename = state->textures_index_to_texture_path[input]; + image.original_filepath = state->proto_filedir + "/" + image.filename; + if (fs::exists(fs::path(image.original_filepath))) { + for (const string& path : state->all_output_dirs) { + fs::path output_path = fs::path(path) / image.filename; + if (!fs::exists(output_path)) { + fs::create_directories(output_path.parent_path()); + fs::copy_file(fs::path(image.original_filepath), output_path); + } + } + } + *value = image; *is_set = true; } diff --git a/xml_converter/src/packaging_protobin.cpp b/xml_converter/src/packaging_protobin.cpp index 3d31b090..d2eea5ca 100644 --- a/xml_converter/src/packaging_protobin.cpp +++ b/xml_converter/src/packaging_protobin.cpp @@ -25,17 +25,16 @@ void parse_waypoint_categories( string full_category_name, ::waypoint::Category proto_category, map* marker_categories, - vector* parsed_pois) { + vector* parsed_pois, + ProtoReaderState* state) { full_category_name += proto_category.name(); Category* this_category = &(*marker_categories)[full_category_name]; - ProtoReaderState state; - - this_category->parse_protobuf(proto_category, &state); + this_category->parse_protobuf(proto_category, state); for (int i = 0; i < proto_category.icon_size(); i++) { Icon* icon = new Icon(); - icon->parse_protobuf(proto_category.icon(i), &state); + icon->parse_protobuf(proto_category.icon(i), state); // TODO: The field category in Icon is being deprciated // This overwrites any icon.category with its position in the heirarchy icon->category.category = full_category_name; @@ -43,7 +42,7 @@ void parse_waypoint_categories( } for (int i = 0; i < proto_category.trail_size(); i++) { Trail* trail = new Trail(); - trail->parse_protobuf(proto_category.trail(i), &state); + trail->parse_protobuf(proto_category.trail(i), state); // TODO: The field category in Trail is being deprciated // This overwrites any trail.category with its position in the heirarchy trail->category.category = full_category_name; @@ -51,21 +50,26 @@ void parse_waypoint_categories( } for (int i = 0; i < proto_category.children_size(); i++) { - parse_waypoint_categories(full_category_name + ".", proto_category.children(i), &(this_category->children), parsed_pois); + parse_waypoint_categories(full_category_name + ".", proto_category.children(i), &(this_category->children), parsed_pois, state); } } //////////////////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////////// -void read_protobuf_file(string proto_filepath, map* marker_categories, vector* parsed_pois) { +void read_protobuf_file(string proto_filepath, map* marker_categories, vector* parsed_pois, ProtoReaderState* state) { fstream infile; waypoint::Waypoint proto_message; infile.open(proto_filepath, ios::in | ios::binary); proto_message.ParseFromIstream(&infile); + + for (int i = 0; i < proto_message.textures_size(); i++) { + state->textures_index_to_texture_path[i] = proto_message.textures(i).filepath(); + } + for (int i = 0; i < proto_message.category_size(); i++) { - parse_waypoint_categories("", proto_message.category(i), marker_categories, parsed_pois); + parse_waypoint_categories("", proto_message.category(i), marker_categories, parsed_pois, state); } } diff --git a/xml_converter/src/packaging_protobin.hpp b/xml_converter/src/packaging_protobin.hpp index a62c02b7..e8cdb4f6 100644 --- a/xml_converter/src/packaging_protobin.hpp +++ b/xml_converter/src/packaging_protobin.hpp @@ -13,7 +13,8 @@ void read_protobuf_file( std::string proto_filepath, std::map* marker_categories, - std::vector* parsed_pois); + std::vector* parsed_pois, + ProtoReaderState* state); void write_protobuf_file( const std::string& proto_directory, diff --git a/xml_converter/src/packaging_xml.cpp b/xml_converter/src/packaging_xml.cpp index 5efc42ab..ed7a3b96 100644 --- a/xml_converter/src/packaging_xml.cpp +++ b/xml_converter/src/packaging_xml.cpp @@ -13,19 +13,14 @@ using namespace std; ////////////////////////////////// SERIALIZE /////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -void parse_marker_categories(rapidxml::xml_node<>* node, map* marker_categories, vector* errors, string base_dir, int depth = 0) { +void parse_marker_categories(rapidxml::xml_node<>* node, map* marker_categories, vector* errors, XMLReaderState* state, int depth = 0) { if (get_node_name(node) == "MarkerCategory") { string name = lowercase(find_attribute_value(node, "name")); - XMLReaderState state = { - base_dir, - marker_categories, - }; - Category* this_category = &(*marker_categories)[name]; - this_category->init_from_xml(node, errors, &state); + this_category->init_from_xml(node, errors, state); for (rapidxml::xml_node<>* child_node = node->first_node(); child_node; child_node = child_node->next_sibling()) { - parse_marker_categories(child_node, &(this_category->children), errors, base_dir, depth + 1); + parse_marker_categories(child_node, &(this_category->children), errors, state, depth + 1); } } else { @@ -76,14 +71,9 @@ Category* get_category(rapidxml::xml_node<>* node, map* marker // // Parse the xml block into an in-memory array of Markers. //////////////////////////////////////////////////////////////////////////////// -vector parse_pois(rapidxml::xml_node<>* root_node, map* marker_categories, vector* errors, string base_dir) { +vector parse_pois(rapidxml::xml_node<>* root_node, map* marker_categories, vector* errors, XMLReaderState* state) { vector markers; - XMLReaderState state = { - base_dir, - marker_categories, - }; - for (rapidxml::xml_node<>* node = root_node->first_node(); node; node = node->next_sibling()) { if (get_node_name(node) == "POI") { Category* default_category = get_category(node, marker_categories, errors); @@ -94,7 +84,7 @@ vector parse_pois(rapidxml::xml_node<>* root_node, mapdefault_icon; } - icon->init_from_xml(node, errors, &state); + icon->init_from_xml(node, errors, state); markers.push_back(icon); } else if (get_node_name(node) == "Trail") { @@ -106,7 +96,7 @@ vector parse_pois(rapidxml::xml_node<>* root_node, mapdefault_trail; } - trail->init_from_xml(node, errors, &state); + trail->init_from_xml(node, errors, state); markers.push_back(trail); } else { @@ -121,7 +111,7 @@ vector parse_pois(rapidxml::xml_node<>* root_node, map* marker_categories, vector* parsed_pois) { +void parse_xml_file(string xml_filepath, map* marker_categories, vector* parsed_pois, XMLReaderState* state) { vector errors; rapidxml::xml_document<> doc; rapidxml::xml_node<>* root_node; @@ -130,7 +120,6 @@ void parse_xml_file(string xml_filepath, map* marker_categorie doc.parse(xml_file.data(), xml_filepath.c_str()); root_node = doc.first_node(); - string base_dir = get_base_dir(xml_filepath); // Validate the Root Node if (get_node_name(root_node) != "OverlayData") { errors.push_back(new XMLNodeNameError("Root node should be of type OverlayData", root_node)); @@ -141,10 +130,10 @@ void parse_xml_file(string xml_filepath, map* marker_categorie for (rapidxml::xml_node<>* node = root_node->first_node(); node; node = node->next_sibling()) { if (get_node_name(node) == "MarkerCategory") { - parse_marker_categories(node, marker_categories, &errors, base_dir); + parse_marker_categories(node, marker_categories, &errors, state); } else if (get_node_name(node) == "POIs") { - vector temp_vector = parse_pois(node, marker_categories, &errors, base_dir); + vector temp_vector = parse_pois(node, marker_categories, &errors, state); move(temp_vector.begin(), temp_vector.end(), back_inserter(*parsed_pois)); } else { diff --git a/xml_converter/src/packaging_xml.hpp b/xml_converter/src/packaging_xml.hpp index 791303c2..c8333e96 100644 --- a/xml_converter/src/packaging_xml.hpp +++ b/xml_converter/src/packaging_xml.hpp @@ -13,7 +13,8 @@ void parse_xml_file( std::string xml_filepath, std::map* marker_categories, - std::vector* parsed_pois); + std::vector* parsed_pois, + XMLReaderState* state); void write_xml_file( std::string xml_filepath, diff --git a/xml_converter/src/state_structs/proto_reader_state.hpp b/xml_converter/src/state_structs/proto_reader_state.hpp index 7573a489..c04db91b 100644 --- a/xml_converter/src/state_structs/proto_reader_state.hpp +++ b/xml_converter/src/state_structs/proto_reader_state.hpp @@ -1,4 +1,12 @@ #pragma once +#include +#include +#include + struct ProtoReaderState { + // A map from the index within "textures" to the texture path. + std::map textures_index_to_texture_path; + std::string proto_filedir; + std::vector all_output_dirs; }; diff --git a/xml_converter/src/state_structs/xml_reader_state.hpp b/xml_converter/src/state_structs/xml_reader_state.hpp index e60d12da..36a0677f 100644 --- a/xml_converter/src/state_structs/xml_reader_state.hpp +++ b/xml_converter/src/state_structs/xml_reader_state.hpp @@ -1,11 +1,11 @@ #pragma once -#include #include +#include class Category; struct XMLReaderState { std::string xml_filedir; - std::map* marker_categories; + std::vector all_output_dirs; }; diff --git a/xml_converter/src/xml_converter.cpp b/xml_converter/src/xml_converter.cpp index b1a54625..3a430c8f 100644 --- a/xml_converter/src/xml_converter.cpp +++ b/xml_converter/src/xml_converter.cpp @@ -90,33 +90,35 @@ void move_supplementary_files(string input_directory, string output_directory) { } } -void read_taco_directory(string input_path, map* marker_categories, vector* parsed_pois) { +void read_taco_directory(string input_path, map* marker_categories, vector* parsed_pois, XMLReaderState* state) { if (!filesystem::exists(input_path)) { cout << "Error: " << input_path << " is not an existing directory or file" << endl; } else if (filesystem::is_directory(input_path)) { vector xml_files = get_files_by_suffix(input_path, ".xml"); for (const string& path : xml_files) { - parse_xml_file(path, marker_categories, parsed_pois); + parse_xml_file(path, marker_categories, parsed_pois, state); } } else if (filesystem::is_regular_file(input_path)) { - parse_xml_file(input_path, marker_categories, parsed_pois); + state->xml_filedir = get_base_dir(input_path); + parse_xml_file(input_path, marker_categories, parsed_pois, state); } } -void read_burrito_directory(string input_path, map* marker_categories, vector* parsed_pois) { +void read_burrito_directory(string input_path, map* marker_categories, vector* parsed_pois, ProtoReaderState* state) { if (!filesystem::exists(input_path)) { cout << "Error: " << input_path << " is not an existing directory or file" << endl; } else if (filesystem::is_directory(input_path)) { vector burrito_files = get_files_by_suffix(input_path, ".bin"); for (const string& path : burrito_files) { - read_protobuf_file(path, marker_categories, parsed_pois); + read_protobuf_file(path, marker_categories, parsed_pois, state); } } else if (filesystem::is_regular_file(input_path)) { - read_protobuf_file(input_path, marker_categories, parsed_pois); + state->proto_filedir = get_base_dir(input_path); + read_protobuf_file(input_path, marker_categories, parsed_pois, state); } } @@ -152,28 +154,36 @@ void process_data( vector parsed_pois; map marker_categories; + vector all_output_paths; + if (output_split_waypoint_dir != "") { + all_output_paths.push_back(output_split_waypoint_dir); + } + if (output_taco_paths.size() != 0) { + for (size_t i = 0; i < output_taco_paths.size(); i++) { + all_output_paths.push_back(output_taco_paths[i]); + } + } + if (output_waypoint_paths.size() != 0) { + for (size_t i = 0; i < output_waypoint_paths.size(); i++) { + all_output_paths.push_back(output_waypoint_paths[i]); + } + } + // Read in all the xml taco markerpacks auto begin = chrono::high_resolution_clock::now(); for (size_t i = 0; i < input_taco_paths.size(); i++) { cout << "Loading taco pack " << input_taco_paths[i] << endl; + + XMLReaderState state = { + input_taco_paths[i], + all_output_paths, + }; + read_taco_directory( input_taco_paths[i], &marker_categories, - &parsed_pois); - - if (output_split_waypoint_dir != "") { - move_supplementary_files(input_taco_paths[i], output_split_waypoint_dir); - } - if (output_taco_paths.size() != 0) { - for (size_t j = 0; j < output_taco_paths.size(); j++) { - move_supplementary_files(input_taco_paths[i], output_taco_paths[j]); - } - } - if (output_waypoint_paths.size() != 0) { - for (size_t j = 0; j < output_waypoint_paths.size(); j++) { - move_supplementary_files(input_taco_paths[i], output_waypoint_paths[j]); - } - } + &parsed_pois, + &state); } auto end = chrono::high_resolution_clock::now(); auto dur = end - begin; @@ -183,24 +193,18 @@ void process_data( // Read in all the protobin waypoint markerpacks for (size_t i = 0; i < input_waypoint_paths.size(); i++) { cout << "Loading waypoint pack " << input_waypoint_paths[i] << endl; + + ProtoReaderState state = { + {}, + input_waypoint_paths[i], + all_output_paths, + }; + read_burrito_directory( input_waypoint_paths[i], &marker_categories, - &parsed_pois); - - if (output_split_waypoint_dir != "") { - move_supplementary_files(input_waypoint_paths[i], output_split_waypoint_dir); - } - if (output_taco_paths.size() != 0) { - for (size_t j = 0; j < output_taco_paths.size(); j++) { - move_supplementary_files(input_waypoint_paths[i], output_taco_paths[j]); - } - } - if (output_waypoint_paths.size() != 0) { - for (size_t j = 0; j < output_waypoint_paths.size(); j++) { - move_supplementary_files(input_waypoint_paths[i], output_waypoint_paths[j]); - } - } + &parsed_pois, + &state); } // Write all of the xml taco paths From 9c78165b7e66b040c051beb4686b1f408f697ef8 Mon Sep 17 00:00:00 2001 From: klingbolt Date: Thu, 11 Jan 2024 23:07:57 -0500 Subject: [PATCH 04/11] removing erroneous file --- xml_converter/src/Imbiber.py | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 xml_converter/src/Imbiber.py diff --git a/xml_converter/src/Imbiber.py b/xml_converter/src/Imbiber.py deleted file mode 100644 index a229096a..00000000 --- a/xml_converter/src/Imbiber.py +++ /dev/null @@ -1,17 +0,0 @@ -import time -import pyautogui - -def simulate_5_press(): - pyautogui.press('5') - print("Pressed 5") - -if __name__ == "__main__": - # try: - # while True: - - # simulate_5_press() - # time.sleep(300) # 300 seconds = 5 minutes - # except KeyboardInterrupt: - # print("Script stopped.") - pyautogui.moveTo("Snowman_Tonic.png") - pyautogui.doubleClick() \ No newline at end of file From 56d937037153e510f847cc200a0e28771743369e Mon Sep 17 00:00:00 2001 From: klingbolt Date: Thu, 18 Jan 2024 23:30:46 -0500 Subject: [PATCH 05/11] Moved structs into the packaging files and changed the data format of the structs --- xml_converter/src/attribute/image.cpp | 26 +---- xml_converter/src/attribute/trail_data.cpp | 6 +- xml_converter/src/packaging_protobin.cpp | 51 ++++++--- xml_converter/src/packaging_protobin.hpp | 8 +- xml_converter/src/packaging_xml.cpp | 30 ++++- xml_converter/src/packaging_xml.hpp | 6 +- .../src/state_structs/proto_reader_state.hpp | 11 +- .../src/state_structs/proto_writer_state.hpp | 1 + .../src/state_structs/xml_reader_state.hpp | 4 +- .../src/state_structs/xml_writer_state.hpp | 8 +- xml_converter/src/xml_converter.cpp | 107 ++++++------------ 11 files changed, 121 insertions(+), 137 deletions(-) diff --git a/xml_converter/src/attribute/image.cpp b/xml_converter/src/attribute/image.cpp index d49402bf..63473b30 100644 --- a/xml_converter/src/attribute/image.cpp +++ b/xml_converter/src/attribute/image.cpp @@ -1,6 +1,5 @@ #include "image.hpp" -#include #include #include @@ -9,7 +8,6 @@ #include "../string_helper.hpp" using namespace std; -namespace fs = std::filesystem; //////////////////////////////////////////////////////////////////////////////// // parse_image @@ -25,15 +23,6 @@ void xml_attribute_to_image( Image image; image.filename = get_attribute_value(input); image.original_filepath = join_file_paths(state->xml_filedir, image.filename); - if (fs::exists(fs::path(image.original_filepath))) { - for (const string& path : state->all_output_dirs) { - fs::path output_path = fs::path(path) / image.filename; - if (!fs::exists(output_path)) { - fs::create_directories(output_path.parent_path()); - fs::copy_file(fs::path(image.original_filepath), output_path); - } - } - } *value = image; *is_set = true; } @@ -47,6 +36,7 @@ string image_to_xml_attribute( const string& attribute_name, XMLWriterState* state, const Image* value) { + state->textures.push_back(value); return " " + attribute_name + "=\"" + value->filename + "\""; } @@ -61,18 +51,8 @@ void proto_to_image( Image* value, bool* is_set) { Image image; - image.filename = state->textures_index_to_texture_path[input]; - image.original_filepath = state->proto_filedir + "/" + image.filename; - if (fs::exists(fs::path(image.original_filepath))) { - for (const string& path : state->all_output_dirs) { - fs::path output_path = fs::path(path) / image.filename; - if (!fs::exists(output_path)) { - fs::create_directories(output_path.parent_path()); - fs::copy_file(fs::path(image.original_filepath), output_path); - } - } - } - + image.filename = state->textures[input].filepath(); + image.original_filepath = join_file_paths(state->proto_filedir, image.filename); *value = image; *is_set = true; } diff --git a/xml_converter/src/attribute/trail_data.cpp b/xml_converter/src/attribute/trail_data.cpp index b3f19690..ed0ac530 100644 --- a/xml_converter/src/attribute/trail_data.cpp +++ b/xml_converter/src/attribute/trail_data.cpp @@ -32,7 +32,7 @@ void xml_attribute_to_trail_data( bool* is_map_id_set) { TrailData trail_data; string trail_data_relative_path = get_attribute_value(input); - if (state->xml_filedir == "") { + if (string(state->xml_filedir) == "") { throw "Error: Marker pack base directory is an empty string"; } if (trail_data_relative_path == "") { @@ -41,7 +41,7 @@ void xml_attribute_to_trail_data( } ifstream trail_data_file; - string trail_path = state->xml_filedir + "/" + trail_data_relative_path; + string trail_path = string(state->xml_filedir) + "/" + trail_data_relative_path; trail_data_file.open(trail_path, ios::in | ios::binary); if (!trail_data_file.good()) { errors->push_back(new XMLAttributeValueError("No trail file found at " + trail_path, input)); @@ -132,7 +132,7 @@ string trail_data_to_xml_attribute( } string trail_file_name = long_to_hex_string(djb2_hash(byte_array, byte_array_size)) + ".trl"; - string trail_file_path = join_file_paths(state->filedir, trail_file_name); + string trail_file_path = join_file_paths(state->xml_filedir, trail_file_name); ofstream trail_data_file(trail_file_path, ios::binary); diff --git a/xml_converter/src/packaging_protobin.cpp b/xml_converter/src/packaging_protobin.cpp index d2eea5ca..5ce733c7 100644 --- a/xml_converter/src/packaging_protobin.cpp +++ b/xml_converter/src/packaging_protobin.cpp @@ -1,5 +1,6 @@ #include "packaging_protobin.hpp" +#include #include #include #include @@ -8,11 +9,13 @@ #include "category_gen.hpp" #include "parseable.hpp" +#include "state_structs/proto_writer_state.hpp" #include "string_helper.hpp" #include "string_hierarchy.hpp" #include "waypoint.pb.h" using namespace std; +namespace fs = std::filesystem; //////////////////////////////////////////////////////////////////////////////// ////////////////////////////////// SERIALIZE /////////////////////////////////// @@ -57,19 +60,19 @@ void parse_waypoint_categories( //////////////////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////////// -void read_protobuf_file(string proto_filepath, map* marker_categories, vector* parsed_pois, ProtoReaderState* state) { +void read_protobuf_file(string proto_filepath, const string proto_filedir, map* marker_categories, vector* parsed_pois) { fstream infile; waypoint::Waypoint proto_message; + ProtoReaderState state; + state.proto_filedir = proto_filedir.c_str(); infile.open(proto_filepath, ios::in | ios::binary); proto_message.ParseFromIstream(&infile); - for (int i = 0; i < proto_message.textures_size(); i++) { - state->textures_index_to_texture_path[i] = proto_message.textures(i).filepath(); - } + state.textures = proto_message.textures(); for (int i = 0; i < proto_message.category_size(); i++) { - parse_waypoint_categories("", proto_message.category(i), marker_categories, parsed_pois, state); + parse_waypoint_categories("", proto_message.category(i), marker_categories, parsed_pois, &state); } } @@ -158,7 +161,16 @@ void proto_post_processing(ProtoWriterState* state, waypoint::Waypoint* proto) { for (size_t i = 1; i < state->textures.size(); i++) { waypoint::TextureData* texture_data = proto->add_textures(); - texture_data->set_filepath(state->textures[i]->filename); + const Image* image = state->textures[i]; + texture_data->set_filepath(image->filename); + if (fs::exists(fs::path(state->textures[i]->original_filepath))) { + fs::path output_path = fs::path(state->proto_filedir) / image->filename; + fs::create_directories(output_path.parent_path()); + fs::copy_file(fs::path(image->original_filepath), output_path, fs::copy_options::update_existing); + } + else { + cout << "Warning: File path " << state->textures[i]->original_filepath << " not found." << endl; + } } } } @@ -167,12 +179,11 @@ void _write_protobuf_file( const string& filepath, const StringHierarchy& category_filter, const map* marker_categories, - const std::map>& category_to_pois) { + const std::map>& category_to_pois, + ProtoWriterState* state) { ofstream outfile; outfile.open(filepath, ios::out | ios::binary); - ProtoWriterState state; - if (!outfile.is_open()) { cout << "Unable to open " << filepath << endl; } @@ -189,25 +200,27 @@ void _write_protobuf_file( category_filter, category_to_pois, &category_vector, - &state); + state); if (maybe_category.is_category) { output_message.add_category()->MergeFrom(maybe_category.category); } } - proto_post_processing(&state, &output_message); + proto_post_processing(state, &output_message); output_message.SerializeToOstream(&outfile); outfile.close(); } void write_protobuf_file( - const string& filepath, + const string proto_filedir, const StringHierarchy& category_filter, const map* marker_categories, const vector* parsed_pois) { std::map> category_to_pois; + ProtoWriterState state; + state.proto_filedir = proto_filedir.c_str(); for (size_t i = 0; i < parsed_pois->size(); i++) { Parseable* parsed_poi = (*parsed_pois)[i]; @@ -225,19 +238,22 @@ void write_protobuf_file( } _write_protobuf_file( - join_file_paths(filepath, "markers.bin"), + join_file_paths(state.proto_filedir, "markers.bin"), category_filter, marker_categories, - category_to_pois); + category_to_pois, + &state); } // Write protobuf per map id void write_protobuf_file_per_map_id( - const string& proto_directory, + const string proto_filedir, const StringHierarchy& category_filter, const map* marker_categories, const vector* parsed_pois) { std::map>> mapid_to_category_to_pois; + ProtoWriterState state; + state.proto_filedir = proto_filedir.c_str(); for (size_t i = 0; i < parsed_pois->size(); i++) { Parseable* parsed_poi = (*parsed_pois)[i]; @@ -255,12 +271,13 @@ void write_protobuf_file_per_map_id( } for (auto iterator = mapid_to_category_to_pois.begin(); iterator != mapid_to_category_to_pois.end(); iterator++) { - string output_filepath = join_file_paths(proto_directory, to_string(iterator->first) + ".bin"); + string output_filepath = join_file_paths(state.proto_filedir, to_string(iterator->first) + ".bin"); _write_protobuf_file( output_filepath, category_filter, marker_categories, - iterator->second); + iterator->second, + &state); } } diff --git a/xml_converter/src/packaging_protobin.hpp b/xml_converter/src/packaging_protobin.hpp index e8cdb4f6..f4a7cca7 100644 --- a/xml_converter/src/packaging_protobin.hpp +++ b/xml_converter/src/packaging_protobin.hpp @@ -12,18 +12,18 @@ void read_protobuf_file( std::string proto_filepath, + const std::string proto_filedir, std::map* marker_categories, - std::vector* parsed_pois, - ProtoReaderState* state); + std::vector* parsed_pois); void write_protobuf_file( - const std::string& proto_directory, + const std::string proto_filedir, const StringHierarchy& category_filter, const std::map* marker_categories, const std::vector* parsed_pois); void write_protobuf_file_per_map_id( - const std::string& proto_directory, + const std::string proto_filedir, const StringHierarchy& category_filter, const std::map* marker_categories, const std::vector* parsed_pois); diff --git a/xml_converter/src/packaging_xml.cpp b/xml_converter/src/packaging_xml.cpp index ed7a3b96..d41471dd 100644 --- a/xml_converter/src/packaging_xml.cpp +++ b/xml_converter/src/packaging_xml.cpp @@ -1,13 +1,16 @@ #include "packaging_xml.hpp" +#include #include #include "rapid_helpers.hpp" #include "rapidxml-1.13/rapidxml.hpp" #include "rapidxml-1.13/rapidxml_utils.hpp" +#include "state_structs/xml_reader_state.hpp" #include "string_helper.hpp" using namespace std; +namespace fs = std::filesystem; //////////////////////////////////////////////////////////////////////////////// ////////////////////////////////// SERIALIZE /////////////////////////////////// @@ -111,10 +114,12 @@ vector parse_pois(rapidxml::xml_node<>* root_node, map* marker_categories, vector* parsed_pois, XMLReaderState* state) { +void parse_xml_file(std::string xml_filepath, const std::string xml_filedir, map* marker_categories, vector* parsed_pois) { vector errors; rapidxml::xml_document<> doc; rapidxml::xml_node<>* root_node; + XMLReaderState state; + state.xml_filedir = xml_filedir.c_str(); rapidxml::file<> xml_file(xml_filepath.c_str()); doc.parse(xml_file.data(), xml_filepath.c_str()); @@ -130,10 +135,10 @@ void parse_xml_file(string xml_filepath, map* marker_categorie for (rapidxml::xml_node<>* node = root_node->first_node(); node; node = node->next_sibling()) { if (get_node_name(node) == "MarkerCategory") { - parse_marker_categories(node, marker_categories, &errors, state); + parse_marker_categories(node, marker_categories, &errors, &state); } else if (get_node_name(node) == "POIs") { - vector temp_vector = parse_pois(node, marker_categories, &errors, state); + vector temp_vector = parse_pois(node, marker_categories, &errors, &state); move(temp_vector.begin(), temp_vector.end(), back_inserter(*parsed_pois)); } else { @@ -149,14 +154,26 @@ void parse_xml_file(string xml_filepath, map* marker_categorie //////////////////////////////////////////////////////////////////////////////// ///////////////////////////////// DESERIALIZE ////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// +void xml_post_processing(XMLWriterState* state) { + if (state->textures.size() > 1) { + for (size_t i = 1; i < state->textures.size(); i++) { + const Image* image = state->textures[i]; + if (fs::exists(fs::path(state->textures[i]->original_filepath))) { + fs::path output_path = fs::path(state->xml_filedir) / image->filename; + fs::create_directories(output_path.parent_path()); + fs::copy_file(fs::path(image->original_filepath), output_path, fs::copy_options::update_existing); + } + } + } +} -void write_xml_file(string xml_filepath, map* marker_categories, vector* parsed_pois) { +void write_xml_file(const string xml_filedir, map* marker_categories, vector* parsed_pois) { ofstream outfile; string tab_string; - XMLWriterState state; - state.filedir = get_base_dir(xml_filepath); + state.xml_filedir = xml_filedir.c_str(); + string xml_filepath = join_file_paths(xml_filedir, "xml_file.xml"); outfile.open(xml_filepath, ios::out); outfile << "\n"; @@ -178,5 +195,6 @@ void write_xml_file(string xml_filepath, map* marker_categorie } outfile << "\n\n"; + xml_post_processing(&state); outfile.close(); } diff --git a/xml_converter/src/packaging_xml.hpp b/xml_converter/src/packaging_xml.hpp index c8333e96..d22fd46d 100644 --- a/xml_converter/src/packaging_xml.hpp +++ b/xml_converter/src/packaging_xml.hpp @@ -12,11 +12,11 @@ void parse_xml_file( std::string xml_filepath, + const std::string xml_filedir, std::map* marker_categories, - std::vector* parsed_pois, - XMLReaderState* state); + std::vector* parsed_pois); void write_xml_file( - std::string xml_filepath, + const std::string xml_filedir, std::map* marker_categories, std::vector* parsed_pois); diff --git a/xml_converter/src/state_structs/proto_reader_state.hpp b/xml_converter/src/state_structs/proto_reader_state.hpp index c04db91b..04f8cbf5 100644 --- a/xml_converter/src/state_structs/proto_reader_state.hpp +++ b/xml_converter/src/state_structs/proto_reader_state.hpp @@ -1,12 +1,11 @@ #pragma once -#include #include -#include + +#include "waypoint.pb.h" struct ProtoReaderState { - // A map from the index within "textures" to the texture path. - std::map textures_index_to_texture_path; - std::string proto_filedir; - std::vector all_output_dirs; + // A list of all of the textures with their paths. + google::protobuf::RepeatedPtrField<::waypoint::TextureData> textures; + const char* proto_filedir; }; diff --git a/xml_converter/src/state_structs/proto_writer_state.hpp b/xml_converter/src/state_structs/proto_writer_state.hpp index d7817037..a12c74e5 100644 --- a/xml_converter/src/state_structs/proto_writer_state.hpp +++ b/xml_converter/src/state_structs/proto_writer_state.hpp @@ -8,6 +8,7 @@ class Image; class ProtoWriterState { public: + const char* proto_filedir; // A map from texture path to the index within "textures" that the path is saved in. std::map texture_path_to_textures_index; diff --git a/xml_converter/src/state_structs/xml_reader_state.hpp b/xml_converter/src/state_structs/xml_reader_state.hpp index 36a0677f..3060cd09 100644 --- a/xml_converter/src/state_structs/xml_reader_state.hpp +++ b/xml_converter/src/state_structs/xml_reader_state.hpp @@ -1,11 +1,9 @@ #pragma once #include -#include class Category; struct XMLReaderState { - std::string xml_filedir; - std::vector all_output_dirs; + const char* xml_filedir; }; diff --git a/xml_converter/src/state_structs/xml_writer_state.hpp b/xml_converter/src/state_structs/xml_writer_state.hpp index b1d4c67b..c2ff620e 100644 --- a/xml_converter/src/state_structs/xml_writer_state.hpp +++ b/xml_converter/src/state_structs/xml_writer_state.hpp @@ -1,7 +1,13 @@ #pragma once #include +#include + +class Image; struct XMLWriterState { - std::string filedir; + const char* xml_filedir; + + // A list of all of the textures with their paths. + std::vector textures; }; diff --git a/xml_converter/src/xml_converter.cpp b/xml_converter/src/xml_converter.cpp index 3a430c8f..348a4577 100644 --- a/xml_converter/src/xml_converter.cpp +++ b/xml_converter/src/xml_converter.cpp @@ -62,74 +62,69 @@ vector get_files_by_suffix(string directory, string suffix) { return files; } -void move_supplementary_files(string input_directory, string output_directory) { - DIR* dir = opendir(input_directory.c_str()); - struct dirent* entry; - while ((entry = readdir(dir)) != NULL) { - string filename = entry->d_name; - if (filename != "." && filename != "..") { - string path = join_file_paths(input_directory, filename); - if (entry->d_type == DT_DIR) { - string new_directory = join_file_paths(output_directory, filename); - if (mkdir(new_directory.c_str(), 0700) == -1 && errno != EEXIST) { - cout << "Error making " << new_directory << endl; - continue; - } - move_supplementary_files(path, new_directory); - } - else if (has_suffix(filename, ".trl") || has_suffix(filename, ".xml") || has_suffix(filename, ".bin")) { - continue; - } - else { - // TODO: Only include files that are referenced by the - // individual markers in order to avoid any unnessecary files - string new_path = join_file_paths(output_directory, filename); - copy_file(path, new_path); - } - } - } -} - -void read_taco_directory(string input_path, map* marker_categories, vector* parsed_pois, XMLReaderState* state) { +void read_taco_directory( + string input_path, + map* marker_categories, + vector* parsed_pois) { if (!filesystem::exists(input_path)) { cout << "Error: " << input_path << " is not an existing directory or file" << endl; } else if (filesystem::is_directory(input_path)) { vector xml_files = get_files_by_suffix(input_path, ".xml"); for (const string& path : xml_files) { - parse_xml_file(path, marker_categories, parsed_pois, state); + parse_xml_file(path, input_path, marker_categories, parsed_pois); } } else if (filesystem::is_regular_file(input_path)) { - state->xml_filedir = get_base_dir(input_path); - parse_xml_file(input_path, marker_categories, parsed_pois, state); + parse_xml_file(input_path, get_base_dir(input_path), marker_categories, parsed_pois); } } -void read_burrito_directory(string input_path, map* marker_categories, vector* parsed_pois, ProtoReaderState* state) { +void read_burrito_directory( + string input_path, + map* marker_categories, + vector* parsed_pois) { if (!filesystem::exists(input_path)) { cout << "Error: " << input_path << " is not an existing directory or file" << endl; } else if (filesystem::is_directory(input_path)) { vector burrito_files = get_files_by_suffix(input_path, ".bin"); for (const string& path : burrito_files) { - read_protobuf_file(path, marker_categories, parsed_pois, state); + read_protobuf_file(path, input_path, marker_categories, parsed_pois); } } else if (filesystem::is_regular_file(input_path)) { - state->proto_filedir = get_base_dir(input_path); - read_protobuf_file(input_path, marker_categories, parsed_pois, state); + read_protobuf_file(input_path, get_base_dir(input_path), marker_categories, parsed_pois); } } -void write_taco_directory(string output_path, map* marker_categories, vector* parsed_pois) { +void write_taco_directory( + string output_path, + map* marker_categories, + vector* parsed_pois) { // TODO: Exportion of XML Marker Packs File Structure #111 if (!filesystem::is_directory(output_path)) { if (!filesystem::create_directory(output_path)) { cout << "Error: " << output_path << "is not a valid directory path" << endl; } + return; } - write_xml_file(join_file_paths(output_path, "xml_file.xml"), marker_categories, parsed_pois); + write_xml_file(output_path, marker_categories, parsed_pois); +} + +void write_burrito_directory( + string output_path, + map* marker_categories, + vector* parsed_pois) { + if (!filesystem::is_directory(output_path)) { + if (!filesystem::create_directory(output_path)) { + cout << "Error: " << output_path << "is not a valid directory path" << endl; + return; + } + } + StringHierarchy category_filter; + category_filter.add_path({}, true); + write_protobuf_file(output_path, category_filter, marker_categories, parsed_pois); } //////////////////////////////////////////////////////////////////////////////// @@ -154,36 +149,15 @@ void process_data( vector parsed_pois; map marker_categories; - vector all_output_paths; - if (output_split_waypoint_dir != "") { - all_output_paths.push_back(output_split_waypoint_dir); - } - if (output_taco_paths.size() != 0) { - for (size_t i = 0; i < output_taco_paths.size(); i++) { - all_output_paths.push_back(output_taco_paths[i]); - } - } - if (output_waypoint_paths.size() != 0) { - for (size_t i = 0; i < output_waypoint_paths.size(); i++) { - all_output_paths.push_back(output_waypoint_paths[i]); - } - } - // Read in all the xml taco markerpacks auto begin = chrono::high_resolution_clock::now(); for (size_t i = 0; i < input_taco_paths.size(); i++) { cout << "Loading taco pack " << input_taco_paths[i] << endl; - XMLReaderState state = { - input_taco_paths[i], - all_output_paths, - }; - read_taco_directory( input_taco_paths[i], &marker_categories, - &parsed_pois, - &state); + &parsed_pois); } auto end = chrono::high_resolution_clock::now(); auto dur = end - begin; @@ -194,17 +168,10 @@ void process_data( for (size_t i = 0; i < input_waypoint_paths.size(); i++) { cout << "Loading waypoint pack " << input_waypoint_paths[i] << endl; - ProtoReaderState state = { - {}, - input_waypoint_paths[i], - all_output_paths, - }; - read_burrito_directory( input_waypoint_paths[i], &marker_categories, - &parsed_pois, - &state); + &parsed_pois); } // Write all of the xml taco paths @@ -219,9 +186,7 @@ void process_data( // Write all of the protobin waypoint paths for (size_t i = 0; i < output_waypoint_paths.size(); i++) { - StringHierarchy category_filter; - category_filter.add_path({}, true); - write_protobuf_file(output_waypoint_paths[i], category_filter, &marker_categories, &parsed_pois); + write_burrito_directory(output_waypoint_paths[i], &marker_categories, &parsed_pois); } // Write the special map-split protbin waypoint file From 87754e6883b12677456bcc2adbf5351d6d7a543f Mon Sep 17 00:00:00 2001 From: klingbolt Date: Wed, 21 Feb 2024 00:01:26 -0500 Subject: [PATCH 06/11] reworked typing and moved the copying function for xml images --- xml_converter/src/attribute/image.cpp | 11 +++++--- xml_converter/src/attribute/trail_data.cpp | 6 ++--- xml_converter/src/packaging_protobin.cpp | 18 ++++++------- xml_converter/src/packaging_protobin.hpp | 4 +-- xml_converter/src/packaging_xml.cpp | 26 ++++--------------- xml_converter/src/packaging_xml.hpp | 4 +-- .../src/state_structs/proto_reader_state.hpp | 2 +- .../src/state_structs/proto_writer_state.hpp | 2 +- .../src/state_structs/xml_reader_state.hpp | 2 +- .../src/state_structs/xml_writer_state.hpp | 6 +---- 10 files changed, 33 insertions(+), 48 deletions(-) diff --git a/xml_converter/src/attribute/image.cpp b/xml_converter/src/attribute/image.cpp index 63473b30..0e15877f 100644 --- a/xml_converter/src/attribute/image.cpp +++ b/xml_converter/src/attribute/image.cpp @@ -1,5 +1,6 @@ #include "image.hpp" +#include #include #include @@ -22,7 +23,7 @@ void xml_attribute_to_image( bool* is_set) { Image image; image.filename = get_attribute_value(input); - image.original_filepath = join_file_paths(state->xml_filedir, image.filename); + image.original_filepath = join_file_paths(state->xml_directory, image.filename); *value = image; *is_set = true; } @@ -36,7 +37,11 @@ string image_to_xml_attribute( const string& attribute_name, XMLWriterState* state, const Image* value) { - state->textures.push_back(value); + if (filesystem::exists(filesystem::path(value->original_filepath))) { + filesystem::path output_path = filesystem::path(state->xml_directory) / value->filename; + filesystem::create_directories(output_path.parent_path()); + filesystem::copy_file(filesystem::path(value->original_filepath), output_path, filesystem::copy_options::overwrite_existing); + } return " " + attribute_name + "=\"" + value->filename + "\""; } @@ -52,7 +57,7 @@ void proto_to_image( bool* is_set) { Image image; image.filename = state->textures[input].filepath(); - image.original_filepath = join_file_paths(state->proto_filedir, image.filename); + image.original_filepath = join_file_paths(state->proto_directory, image.filename); *value = image; *is_set = true; } diff --git a/xml_converter/src/attribute/trail_data.cpp b/xml_converter/src/attribute/trail_data.cpp index ed0ac530..61872dab 100644 --- a/xml_converter/src/attribute/trail_data.cpp +++ b/xml_converter/src/attribute/trail_data.cpp @@ -32,7 +32,7 @@ void xml_attribute_to_trail_data( bool* is_map_id_set) { TrailData trail_data; string trail_data_relative_path = get_attribute_value(input); - if (string(state->xml_filedir) == "") { + if (state->xml_directory == "") { throw "Error: Marker pack base directory is an empty string"; } if (trail_data_relative_path == "") { @@ -41,7 +41,7 @@ void xml_attribute_to_trail_data( } ifstream trail_data_file; - string trail_path = string(state->xml_filedir) + "/" + trail_data_relative_path; + string trail_path = state->xml_directory + "/" + trail_data_relative_path; trail_data_file.open(trail_path, ios::in | ios::binary); if (!trail_data_file.good()) { errors->push_back(new XMLAttributeValueError("No trail file found at " + trail_path, input)); @@ -132,7 +132,7 @@ string trail_data_to_xml_attribute( } string trail_file_name = long_to_hex_string(djb2_hash(byte_array, byte_array_size)) + ".trl"; - string trail_file_path = join_file_paths(state->xml_filedir, trail_file_name); + string trail_file_path = join_file_paths(state->xml_directory, trail_file_name); ofstream trail_data_file(trail_file_path, ios::binary); diff --git a/xml_converter/src/packaging_protobin.cpp b/xml_converter/src/packaging_protobin.cpp index 5ce733c7..4fc3c902 100644 --- a/xml_converter/src/packaging_protobin.cpp +++ b/xml_converter/src/packaging_protobin.cpp @@ -60,11 +60,11 @@ void parse_waypoint_categories( //////////////////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////////// -void read_protobuf_file(string proto_filepath, const string proto_filedir, map* marker_categories, vector* parsed_pois) { +void read_protobuf_file(string proto_filepath, const string proto_directory, map* marker_categories, vector* parsed_pois) { fstream infile; waypoint::Waypoint proto_message; ProtoReaderState state; - state.proto_filedir = proto_filedir.c_str(); + state.proto_directory = proto_directory; infile.open(proto_filepath, ios::in | ios::binary); proto_message.ParseFromIstream(&infile); @@ -164,7 +164,7 @@ void proto_post_processing(ProtoWriterState* state, waypoint::Waypoint* proto) { const Image* image = state->textures[i]; texture_data->set_filepath(image->filename); if (fs::exists(fs::path(state->textures[i]->original_filepath))) { - fs::path output_path = fs::path(state->proto_filedir) / image->filename; + fs::path output_path = fs::path(state->proto_directory) / image->filename; fs::create_directories(output_path.parent_path()); fs::copy_file(fs::path(image->original_filepath), output_path, fs::copy_options::update_existing); } @@ -214,13 +214,13 @@ void _write_protobuf_file( } void write_protobuf_file( - const string proto_filedir, + const string& proto_directory, const StringHierarchy& category_filter, const map* marker_categories, const vector* parsed_pois) { std::map> category_to_pois; ProtoWriterState state; - state.proto_filedir = proto_filedir.c_str(); + state.proto_directory = proto_directory; for (size_t i = 0; i < parsed_pois->size(); i++) { Parseable* parsed_poi = (*parsed_pois)[i]; @@ -238,7 +238,7 @@ void write_protobuf_file( } _write_protobuf_file( - join_file_paths(state.proto_filedir, "markers.bin"), + join_file_paths(state.proto_directory, "markers.bin"), category_filter, marker_categories, category_to_pois, @@ -247,13 +247,13 @@ void write_protobuf_file( // Write protobuf per map id void write_protobuf_file_per_map_id( - const string proto_filedir, + const string& proto_directory, const StringHierarchy& category_filter, const map* marker_categories, const vector* parsed_pois) { std::map>> mapid_to_category_to_pois; ProtoWriterState state; - state.proto_filedir = proto_filedir.c_str(); + state.proto_directory = proto_directory; for (size_t i = 0; i < parsed_pois->size(); i++) { Parseable* parsed_poi = (*parsed_pois)[i]; @@ -271,7 +271,7 @@ void write_protobuf_file_per_map_id( } for (auto iterator = mapid_to_category_to_pois.begin(); iterator != mapid_to_category_to_pois.end(); iterator++) { - string output_filepath = join_file_paths(state.proto_filedir, to_string(iterator->first) + ".bin"); + string output_filepath = join_file_paths(state.proto_directory, to_string(iterator->first) + ".bin"); _write_protobuf_file( output_filepath, diff --git a/xml_converter/src/packaging_protobin.hpp b/xml_converter/src/packaging_protobin.hpp index f4a7cca7..471e310f 100644 --- a/xml_converter/src/packaging_protobin.hpp +++ b/xml_converter/src/packaging_protobin.hpp @@ -17,13 +17,13 @@ void read_protobuf_file( std::vector* parsed_pois); void write_protobuf_file( - const std::string proto_filedir, + const std::string& proto_directory, const StringHierarchy& category_filter, const std::map* marker_categories, const std::vector* parsed_pois); void write_protobuf_file_per_map_id( - const std::string proto_filedir, + const std::string& proto_directory, const StringHierarchy& category_filter, const std::map* marker_categories, const std::vector* parsed_pois); diff --git a/xml_converter/src/packaging_xml.cpp b/xml_converter/src/packaging_xml.cpp index d41471dd..aaa9043e 100644 --- a/xml_converter/src/packaging_xml.cpp +++ b/xml_converter/src/packaging_xml.cpp @@ -1,6 +1,5 @@ #include "packaging_xml.hpp" -#include #include #include "rapid_helpers.hpp" @@ -10,7 +9,6 @@ #include "string_helper.hpp" using namespace std; -namespace fs = std::filesystem; //////////////////////////////////////////////////////////////////////////////// ////////////////////////////////// SERIALIZE /////////////////////////////////// @@ -114,12 +112,12 @@ vector parse_pois(rapidxml::xml_node<>* root_node, map* marker_categories, vector* parsed_pois) { +void parse_xml_file(string xml_filepath, const string xml_directory, map* marker_categories, vector* parsed_pois) { vector errors; rapidxml::xml_document<> doc; rapidxml::xml_node<>* root_node; XMLReaderState state; - state.xml_filedir = xml_filedir.c_str(); + state.xml_directory = xml_directory; rapidxml::file<> xml_file(xml_filepath.c_str()); doc.parse(xml_file.data(), xml_filepath.c_str()); @@ -154,26 +152,13 @@ void parse_xml_file(std::string xml_filepath, const std::string xml_filedir, map //////////////////////////////////////////////////////////////////////////////// ///////////////////////////////// DESERIALIZE ////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -void xml_post_processing(XMLWriterState* state) { - if (state->textures.size() > 1) { - for (size_t i = 1; i < state->textures.size(); i++) { - const Image* image = state->textures[i]; - if (fs::exists(fs::path(state->textures[i]->original_filepath))) { - fs::path output_path = fs::path(state->xml_filedir) / image->filename; - fs::create_directories(output_path.parent_path()); - fs::copy_file(fs::path(image->original_filepath), output_path, fs::copy_options::update_existing); - } - } - } -} - -void write_xml_file(const string xml_filedir, map* marker_categories, vector* parsed_pois) { +void write_xml_file(const string xml_directory, map* marker_categories, vector* parsed_pois) { ofstream outfile; string tab_string; XMLWriterState state; - state.xml_filedir = xml_filedir.c_str(); + state.xml_directory = xml_directory; - string xml_filepath = join_file_paths(xml_filedir, "xml_file.xml"); + string xml_filepath = join_file_paths(xml_directory, "xml_file.xml"); outfile.open(xml_filepath, ios::out); outfile << "\n"; @@ -195,6 +180,5 @@ void write_xml_file(const string xml_filedir, map* marker_cate } outfile << "\n\n"; - xml_post_processing(&state); outfile.close(); } diff --git a/xml_converter/src/packaging_xml.hpp b/xml_converter/src/packaging_xml.hpp index d22fd46d..d4019519 100644 --- a/xml_converter/src/packaging_xml.hpp +++ b/xml_converter/src/packaging_xml.hpp @@ -12,11 +12,11 @@ void parse_xml_file( std::string xml_filepath, - const std::string xml_filedir, + const std::string xml_directory, std::map* marker_categories, std::vector* parsed_pois); void write_xml_file( - const std::string xml_filedir, + const std::string xml_directory, std::map* marker_categories, std::vector* parsed_pois); diff --git a/xml_converter/src/state_structs/proto_reader_state.hpp b/xml_converter/src/state_structs/proto_reader_state.hpp index 04f8cbf5..57a0dd48 100644 --- a/xml_converter/src/state_structs/proto_reader_state.hpp +++ b/xml_converter/src/state_structs/proto_reader_state.hpp @@ -7,5 +7,5 @@ struct ProtoReaderState { // A list of all of the textures with their paths. google::protobuf::RepeatedPtrField<::waypoint::TextureData> textures; - const char* proto_filedir; + std::string proto_directory; }; diff --git a/xml_converter/src/state_structs/proto_writer_state.hpp b/xml_converter/src/state_structs/proto_writer_state.hpp index a12c74e5..39492f2a 100644 --- a/xml_converter/src/state_structs/proto_writer_state.hpp +++ b/xml_converter/src/state_structs/proto_writer_state.hpp @@ -8,7 +8,7 @@ class Image; class ProtoWriterState { public: - const char* proto_filedir; + std::string proto_directory; // A map from texture path to the index within "textures" that the path is saved in. std::map texture_path_to_textures_index; diff --git a/xml_converter/src/state_structs/xml_reader_state.hpp b/xml_converter/src/state_structs/xml_reader_state.hpp index 3060cd09..ba50b76e 100644 --- a/xml_converter/src/state_structs/xml_reader_state.hpp +++ b/xml_converter/src/state_structs/xml_reader_state.hpp @@ -5,5 +5,5 @@ class Category; struct XMLReaderState { - const char* xml_filedir; + std::string xml_directory; }; diff --git a/xml_converter/src/state_structs/xml_writer_state.hpp b/xml_converter/src/state_structs/xml_writer_state.hpp index c2ff620e..a456ef9e 100644 --- a/xml_converter/src/state_structs/xml_writer_state.hpp +++ b/xml_converter/src/state_structs/xml_writer_state.hpp @@ -1,13 +1,9 @@ #pragma once #include -#include class Image; struct XMLWriterState { - const char* xml_filedir; - - // A list of all of the textures with their paths. - std::vector textures; + std::string xml_directory; }; From da49bb2ee1d1e85033b8e5690c233e96a2c2ebb9 Mon Sep 17 00:00:00 2001 From: klingbolt Date: Wed, 21 Feb 2024 00:10:29 -0500 Subject: [PATCH 07/11] changed copying option --- xml_converter/src/packaging_protobin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xml_converter/src/packaging_protobin.cpp b/xml_converter/src/packaging_protobin.cpp index 4fc3c902..d4415d54 100644 --- a/xml_converter/src/packaging_protobin.cpp +++ b/xml_converter/src/packaging_protobin.cpp @@ -166,7 +166,7 @@ void proto_post_processing(ProtoWriterState* state, waypoint::Waypoint* proto) { if (fs::exists(fs::path(state->textures[i]->original_filepath))) { fs::path output_path = fs::path(state->proto_directory) / image->filename; fs::create_directories(output_path.parent_path()); - fs::copy_file(fs::path(image->original_filepath), output_path, fs::copy_options::update_existing); + fs::copy_file(fs::path(image->original_filepath), output_path, fs::copy_options::overwrite_existing); } else { cout << "Warning: File path " << state->textures[i]->original_filepath << " not found." << endl; From 2f68f5cdb4859cdc5a0807357f8b973b5a7f4715 Mon Sep 17 00:00:00 2001 From: klingbolt Date: Sun, 17 Mar 2024 20:36:02 -0400 Subject: [PATCH 08/11] addressing code review --- xml_converter/src/attribute/image.cpp | 17 ++++- xml_converter/src/attribute/trail_data.cpp | 6 +- xml_converter/src/packaging_protobin.cpp | 28 +++---- xml_converter/src/packaging_protobin.hpp | 6 +- xml_converter/src/packaging_xml.cpp | 76 ++++++++++++++++--- xml_converter/src/packaging_xml.hpp | 4 +- .../src/state_structs/proto_reader_state.hpp | 2 +- .../src/state_structs/proto_writer_state.hpp | 2 +- .../src/state_structs/xml_reader_state.hpp | 4 +- .../src/state_structs/xml_writer_state.hpp | 4 +- xml_converter/src/xml_converter.cpp | 2 +- 11 files changed, 102 insertions(+), 49 deletions(-) diff --git a/xml_converter/src/attribute/image.cpp b/xml_converter/src/attribute/image.cpp index 0e15877f..008f3cbd 100644 --- a/xml_converter/src/attribute/image.cpp +++ b/xml_converter/src/attribute/image.cpp @@ -23,7 +23,7 @@ void xml_attribute_to_image( bool* is_set) { Image image; image.filename = get_attribute_value(input); - image.original_filepath = join_file_paths(state->xml_directory, image.filename); + image.original_filepath = join_file_paths(state->marker_pack_root_directory, image.filename); *value = image; *is_set = true; } @@ -38,10 +38,13 @@ string image_to_xml_attribute( XMLWriterState* state, const Image* value) { if (filesystem::exists(filesystem::path(value->original_filepath))) { - filesystem::path output_path = filesystem::path(state->xml_directory) / value->filename; + filesystem::path output_path = filesystem::path(state->marker_pack_root_directory) / value->filename; filesystem::create_directories(output_path.parent_path()); filesystem::copy_file(filesystem::path(value->original_filepath), output_path, filesystem::copy_options::overwrite_existing); } + else { + cout << "Warning: File path " << value->original_filepath << " not found." << endl; + } return " " + attribute_name + "=\"" + value->filename + "\""; } @@ -57,7 +60,7 @@ void proto_to_image( bool* is_set) { Image image; image.filename = state->textures[input].filepath(); - image.original_filepath = join_file_paths(state->proto_directory, image.filename); + image.original_filepath = join_file_paths(state->marker_pack_root_directory, image.filename); *value = image; *is_set = true; } @@ -82,6 +85,14 @@ void image_to_proto( texture_index = state->textures.size(); state->texture_path_to_textures_index[value.original_filepath] = texture_index; state->textures.push_back(&value); + if (filesystem::exists(filesystem::path(value.original_filepath))) { + filesystem::path output_path = filesystem::path(state->marker_pack_root_directory) / value.filename; + filesystem::create_directories(output_path.parent_path()); + filesystem::copy_file(filesystem::path(value.original_filepath), output_path, filesystem::copy_options::overwrite_existing); + } + else { + cout << "Warning: File path " << value.original_filepath << " not found." << endl; + } } setter(texture_index); diff --git a/xml_converter/src/attribute/trail_data.cpp b/xml_converter/src/attribute/trail_data.cpp index 61872dab..749cccbb 100644 --- a/xml_converter/src/attribute/trail_data.cpp +++ b/xml_converter/src/attribute/trail_data.cpp @@ -32,7 +32,7 @@ void xml_attribute_to_trail_data( bool* is_map_id_set) { TrailData trail_data; string trail_data_relative_path = get_attribute_value(input); - if (state->xml_directory == "") { + if (state->marker_pack_root_directory == "") { throw "Error: Marker pack base directory is an empty string"; } if (trail_data_relative_path == "") { @@ -41,7 +41,7 @@ void xml_attribute_to_trail_data( } ifstream trail_data_file; - string trail_path = state->xml_directory + "/" + trail_data_relative_path; + string trail_path = join_file_paths(state->marker_pack_root_directory, trail_data_relative_path); trail_data_file.open(trail_path, ios::in | ios::binary); if (!trail_data_file.good()) { errors->push_back(new XMLAttributeValueError("No trail file found at " + trail_path, input)); @@ -132,7 +132,7 @@ string trail_data_to_xml_attribute( } string trail_file_name = long_to_hex_string(djb2_hash(byte_array, byte_array_size)) + ".trl"; - string trail_file_path = join_file_paths(state->xml_directory, trail_file_name); + string trail_file_path = join_file_paths(state->marker_pack_root_directory, trail_file_name); ofstream trail_data_file(trail_file_path, ios::binary); diff --git a/xml_converter/src/packaging_protobin.cpp b/xml_converter/src/packaging_protobin.cpp index d4415d54..94cd27f8 100644 --- a/xml_converter/src/packaging_protobin.cpp +++ b/xml_converter/src/packaging_protobin.cpp @@ -15,7 +15,6 @@ #include "waypoint.pb.h" using namespace std; -namespace fs = std::filesystem; //////////////////////////////////////////////////////////////////////////////// ////////////////////////////////// SERIALIZE /////////////////////////////////// @@ -60,11 +59,11 @@ void parse_waypoint_categories( //////////////////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////////// -void read_protobuf_file(string proto_filepath, const string proto_directory, map* marker_categories, vector* parsed_pois) { +void read_protobuf_file(string proto_filepath, const string marker_pack_root_directory, map* marker_categories, vector* parsed_pois) { fstream infile; waypoint::Waypoint proto_message; ProtoReaderState state; - state.proto_directory = proto_directory; + state.marker_pack_root_directory = marker_pack_root_directory; infile.open(proto_filepath, ios::in | ios::binary); proto_message.ParseFromIstream(&infile); @@ -161,16 +160,7 @@ void proto_post_processing(ProtoWriterState* state, waypoint::Waypoint* proto) { for (size_t i = 1; i < state->textures.size(); i++) { waypoint::TextureData* texture_data = proto->add_textures(); - const Image* image = state->textures[i]; - texture_data->set_filepath(image->filename); - if (fs::exists(fs::path(state->textures[i]->original_filepath))) { - fs::path output_path = fs::path(state->proto_directory) / image->filename; - fs::create_directories(output_path.parent_path()); - fs::copy_file(fs::path(image->original_filepath), output_path, fs::copy_options::overwrite_existing); - } - else { - cout << "Warning: File path " << state->textures[i]->original_filepath << " not found." << endl; - } + texture_data->set_filepath(state->textures[i]->filename); } } } @@ -214,13 +204,13 @@ void _write_protobuf_file( } void write_protobuf_file( - const string& proto_directory, + const string& marker_pack_root_directory, const StringHierarchy& category_filter, const map* marker_categories, const vector* parsed_pois) { std::map> category_to_pois; ProtoWriterState state; - state.proto_directory = proto_directory; + state.marker_pack_root_directory = marker_pack_root_directory; for (size_t i = 0; i < parsed_pois->size(); i++) { Parseable* parsed_poi = (*parsed_pois)[i]; @@ -238,7 +228,7 @@ void write_protobuf_file( } _write_protobuf_file( - join_file_paths(state.proto_directory, "markers.bin"), + join_file_paths(state.marker_pack_root_directory, "markers.bin"), category_filter, marker_categories, category_to_pois, @@ -247,13 +237,13 @@ void write_protobuf_file( // Write protobuf per map id void write_protobuf_file_per_map_id( - const string& proto_directory, + const string& marker_pack_root_directory, const StringHierarchy& category_filter, const map* marker_categories, const vector* parsed_pois) { std::map>> mapid_to_category_to_pois; ProtoWriterState state; - state.proto_directory = proto_directory; + state.marker_pack_root_directory = marker_pack_root_directory; for (size_t i = 0; i < parsed_pois->size(); i++) { Parseable* parsed_poi = (*parsed_pois)[i]; @@ -271,7 +261,7 @@ void write_protobuf_file_per_map_id( } for (auto iterator = mapid_to_category_to_pois.begin(); iterator != mapid_to_category_to_pois.end(); iterator++) { - string output_filepath = join_file_paths(state.proto_directory, to_string(iterator->first) + ".bin"); + string output_filepath = join_file_paths(state.marker_pack_root_directory, to_string(iterator->first) + ".bin"); _write_protobuf_file( output_filepath, diff --git a/xml_converter/src/packaging_protobin.hpp b/xml_converter/src/packaging_protobin.hpp index 471e310f..495ef54e 100644 --- a/xml_converter/src/packaging_protobin.hpp +++ b/xml_converter/src/packaging_protobin.hpp @@ -12,18 +12,18 @@ void read_protobuf_file( std::string proto_filepath, - const std::string proto_filedir, + const std::string marker_pack_root_directory, std::map* marker_categories, std::vector* parsed_pois); void write_protobuf_file( - const std::string& proto_directory, + const std::string& marker_pack_root_directory, const StringHierarchy& category_filter, const std::map* marker_categories, const std::vector* parsed_pois); void write_protobuf_file_per_map_id( - const std::string& proto_directory, + const std::string& marker_pack_root_directory, const StringHierarchy& category_filter, const std::map* marker_categories, const std::vector* parsed_pois); diff --git a/xml_converter/src/packaging_xml.cpp b/xml_converter/src/packaging_xml.cpp index aaa9043e..9a77d117 100644 --- a/xml_converter/src/packaging_xml.cpp +++ b/xml_converter/src/packaging_xml.cpp @@ -14,16 +14,68 @@ using namespace std; ////////////////////////////////// SERIALIZE /////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -void parse_marker_categories(rapidxml::xml_node<>* node, map* marker_categories, vector* errors, XMLReaderState* state, int depth = 0) { +unsigned int UNKNOWN_CATEGORY_COUNTER = 0; +void parse_marker_categories( + rapidxml::xml_node<>* node, + map* marker_categories, + Category* parent, + vector* errors, + XMLReaderState* state, + int depth = 0) { if (get_node_name(node) == "MarkerCategory") { - string name = lowercase(find_attribute_value(node, "name")); + Category new_category; + new_category.init_from_xml(node, errors, state); + + string name; + if (!new_category.name_is_set) { + errors->push_back(new XMLNodeNameError("Category attribute 'name' is missing so it cannot be properly referenced", node)); + // TODO: Maybe fall back on display name slugification. + name = "UNKNOWN_CATEGORY_" + to_string(UNKNOWN_CATEGORY_COUNTER); + UNKNOWN_CATEGORY_COUNTER++; + } + else if (new_category.name == "") { + errors->push_back(new XMLNodeNameError("Category attribute 'name' is an empty string so it cannot be properly referenced", node)); + // TODO: Maybe fall back on display name slugification. + name = "UNKNOWN_CATEGORY_" + to_string(UNKNOWN_CATEGORY_COUNTER); + UNKNOWN_CATEGORY_COUNTER++; + } + else { + name = lowercase(new_category.name); + } - Category* this_category = &(*marker_categories)[name]; - this_category->init_from_xml(node, errors, state); - for (rapidxml::xml_node<>* child_node = node->first_node(); child_node; child_node = child_node->next_sibling()) { - parse_marker_categories(child_node, &(this_category->children), errors, state, depth + 1); + // If this category itself, without any cascading values, does not have + // an id then create a new one for it based on the hashes of its name + // and its parents names. + if (!new_category.menu_id_is_set) { + Hash128 new_id; + new_id.update(name); + + Category* next_node = parent; + while (next_node != nullptr) { + new_id.update(next_node->name); + next_node = next_node->parent; + } + new_category.menu_id = new_id.unique_id(); + new_category.menu_id_is_set = true; } - } + + // Create and initialize a new category if this one does not exist + Category* existing_category; + auto existing_category_search = marker_categories->find(name); + if (existing_category_search == marker_categories->end()) { + existing_category = &(*marker_categories)[name]; + existing_category->parent = parent; + } + else { + existing_category = &existing_category_search->second; + if (existing_category->parent != parent) { + errors->push_back(new XMLNodeNameError("Category somehow has a different parent then it used to. This might be a bug in xml_converter", node)); + } + } + existing_category->apply_overlay(new_category); + + for (rapidxml::xml_node<>* child_node = node->first_node(); child_node; child_node = child_node->next_sibling()) { + parse_marker_categories(child_node, &(existing_category->children), existing_category, errors, base_dir, depth + 1); else { errors->push_back(new XMLNodeNameError("Unknown MarkerCategory Tag", node)); } @@ -112,12 +164,12 @@ vector parse_pois(rapidxml::xml_node<>* root_node, map* marker_categories, vector* parsed_pois) { +void parse_xml_file(string xml_filepath, const string marker_pack_root_directory, map* marker_categories, vector* parsed_pois) { vector errors; rapidxml::xml_document<> doc; rapidxml::xml_node<>* root_node; XMLReaderState state; - state.xml_directory = xml_directory; + state.marker_pack_root_directory = marker_pack_root_directory; rapidxml::file<> xml_file(xml_filepath.c_str()); doc.parse(xml_file.data(), xml_filepath.c_str()); @@ -152,13 +204,13 @@ void parse_xml_file(string xml_filepath, const string xml_directory, map* marker_categories, vector* parsed_pois) { +void write_xml_file(const string marker_pack_root_directory, map* marker_categories, vector* parsed_pois) { ofstream outfile; string tab_string; XMLWriterState state; - state.xml_directory = xml_directory; + state.marker_pack_root_directory = marker_pack_root_directory; - string xml_filepath = join_file_paths(xml_directory, "xml_file.xml"); + string xml_filepath = join_file_paths(marker_pack_root_directory, "xml_file.xml"); outfile.open(xml_filepath, ios::out); outfile << "\n"; diff --git a/xml_converter/src/packaging_xml.hpp b/xml_converter/src/packaging_xml.hpp index d4019519..a099d625 100644 --- a/xml_converter/src/packaging_xml.hpp +++ b/xml_converter/src/packaging_xml.hpp @@ -12,11 +12,11 @@ void parse_xml_file( std::string xml_filepath, - const std::string xml_directory, + const std::string marker_pack_root_directory, std::map* marker_categories, std::vector* parsed_pois); void write_xml_file( - const std::string xml_directory, + const std::string marker_pack_root_directory, std::map* marker_categories, std::vector* parsed_pois); diff --git a/xml_converter/src/state_structs/proto_reader_state.hpp b/xml_converter/src/state_structs/proto_reader_state.hpp index 57a0dd48..161fa1b2 100644 --- a/xml_converter/src/state_structs/proto_reader_state.hpp +++ b/xml_converter/src/state_structs/proto_reader_state.hpp @@ -7,5 +7,5 @@ struct ProtoReaderState { // A list of all of the textures with their paths. google::protobuf::RepeatedPtrField<::waypoint::TextureData> textures; - std::string proto_directory; + std::string marker_pack_root_directory; }; diff --git a/xml_converter/src/state_structs/proto_writer_state.hpp b/xml_converter/src/state_structs/proto_writer_state.hpp index 39492f2a..f3a36ca0 100644 --- a/xml_converter/src/state_structs/proto_writer_state.hpp +++ b/xml_converter/src/state_structs/proto_writer_state.hpp @@ -8,7 +8,7 @@ class Image; class ProtoWriterState { public: - std::string proto_directory; + std::string marker_pack_root_directory; // A map from texture path to the index within "textures" that the path is saved in. std::map texture_path_to_textures_index; diff --git a/xml_converter/src/state_structs/xml_reader_state.hpp b/xml_converter/src/state_structs/xml_reader_state.hpp index ba50b76e..7c5c7be8 100644 --- a/xml_converter/src/state_structs/xml_reader_state.hpp +++ b/xml_converter/src/state_structs/xml_reader_state.hpp @@ -1,9 +1,11 @@ #pragma once +#include #include class Category; struct XMLReaderState { - std::string xml_directory; + std::string marker_pack_root_directory; + std::map* marker_categories; }; diff --git a/xml_converter/src/state_structs/xml_writer_state.hpp b/xml_converter/src/state_structs/xml_writer_state.hpp index a456ef9e..ac7384cf 100644 --- a/xml_converter/src/state_structs/xml_writer_state.hpp +++ b/xml_converter/src/state_structs/xml_writer_state.hpp @@ -2,8 +2,6 @@ #include -class Image; - struct XMLWriterState { - std::string xml_directory; + std::string marker_pack_root_directory; }; diff --git a/xml_converter/src/xml_converter.cpp b/xml_converter/src/xml_converter.cpp index 348a4577..7f081d1f 100644 --- a/xml_converter/src/xml_converter.cpp +++ b/xml_converter/src/xml_converter.cpp @@ -106,8 +106,8 @@ void write_taco_directory( if (!filesystem::is_directory(output_path)) { if (!filesystem::create_directory(output_path)) { cout << "Error: " << output_path << "is not a valid directory path" << endl; + return; } - return; } write_xml_file(output_path, marker_categories, parsed_pois); } From 06479ed7d53571af48728ce07a46c937b2cd7e7c Mon Sep 17 00:00:00 2001 From: klingbolt Date: Sun, 17 Mar 2024 20:48:56 -0400 Subject: [PATCH 09/11] Fastforward to resolve conflict --- xml_converter/src/attribute/image.cpp | 2 +- xml_converter/src/packaging_xml.cpp | 13 ++----------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/xml_converter/src/attribute/image.cpp b/xml_converter/src/attribute/image.cpp index 02c362ff..ad8cdf04 100644 --- a/xml_converter/src/attribute/image.cpp +++ b/xml_converter/src/attribute/image.cpp @@ -35,7 +35,7 @@ void xml_attribute_to_image( //////////////////////////////////////////////////////////////////////////////// string image_to_xml_attribute( const string& attribute_name, - XMLWriterState*, + XMLWriterState* state, const Image* value) { if (filesystem::exists(filesystem::path(value->original_filepath))) { filesystem::path output_path = filesystem::path(state->marker_pack_root_directory) / value->filename; diff --git a/xml_converter/src/packaging_xml.cpp b/xml_converter/src/packaging_xml.cpp index ca0c84f3..f5700314 100644 --- a/xml_converter/src/packaging_xml.cpp +++ b/xml_converter/src/packaging_xml.cpp @@ -75,18 +75,9 @@ void parse_marker_categories( existing_category->apply_overlay(new_category); for (rapidxml::xml_node<>* child_node = node->first_node(); child_node; child_node = child_node->next_sibling()) { - parse_marker_categories(child_node, &(existing_category->children), existing_category, errors, base_dir, depth + 1); + parse_marker_categories(child_node, &(existing_category->children), existing_category, errors, state, depth + 1); } - else { - existing_category = &existing_category_search->second; - if (existing_category->parent != parent) { - errors->push_back(new XMLNodeNameError("Category somehow has a different parent then it used to. This might be a bug in xml_converter", node)); - } - } - existing_category->apply_overlay(new_category); - - for (rapidxml::xml_node<>* child_node = node->first_node(); child_node; child_node = child_node->next_sibling()) { - parse_marker_categories(child_node, &(existing_category->children), existing_category, errors, base_dir, depth + 1); + } else { errors->push_back(new XMLNodeNameError("Unknown MarkerCategory Tag", node)); } From 7f07be6446ff21b39b5aec058eeebba17a160d77 Mon Sep 17 00:00:00 2001 From: klingbolt Date: Sun, 17 Mar 2024 21:20:21 -0400 Subject: [PATCH 10/11] Changed the images in tests to smaller icons --- .../texture/input/pack/my_texture.png | Bin 5881 -> 0 bytes .../texture/input/pack/my_texture2.png | Bin 13277 -> 0 bytes .../texture/input/pack/somedir/my_texture3.png | Bin 13277 -> 0 bytes .../input/pack/somedir/texture_three.png | Bin 0 -> 8184 bytes .../texture/input/pack/texture_one.png | Bin 0 -> 6530 bytes .../texture/input/pack/texture_two.png | Bin 0 -> 7066 bytes .../test_cases/texture/input/pack/xml_file.xml | 8 ++++---- .../test_cases/texture/output_proto/markers.bin | Bin 115 -> 118 bytes .../texture/output_proto/my_texture.png | Bin 5881 -> 0 bytes .../texture/output_proto/my_texture2.png | Bin 13277 -> 0 bytes .../output_proto/somedir/my_texture3.png | Bin 13277 -> 0 bytes .../output_proto/somedir/texture_three.png | Bin 0 -> 8184 bytes .../texture/output_proto/texture_one.png | Bin 0 -> 6530 bytes .../texture/output_proto/texture_two.png | Bin 0 -> 7066 bytes .../texture/output_xml/my_texture.png | Bin 5881 -> 0 bytes .../texture/output_xml/my_texture2.png | Bin 13277 -> 0 bytes .../texture/output_xml/somedir/my_texture3.png | Bin 13277 -> 0 bytes .../output_xml/somedir/texture_three.png | Bin 0 -> 8184 bytes .../texture/output_xml/texture_one.png | Bin 0 -> 6530 bytes .../texture/output_xml/texture_two.png | Bin 0 -> 7066 bytes .../test_cases/texture/output_xml/xml_file.xml | 8 ++++---- 21 files changed, 8 insertions(+), 8 deletions(-) delete mode 100644 xml_converter/integration_tests/test_cases/texture/input/pack/my_texture.png delete mode 100644 xml_converter/integration_tests/test_cases/texture/input/pack/my_texture2.png delete mode 100644 xml_converter/integration_tests/test_cases/texture/input/pack/somedir/my_texture3.png create mode 100644 xml_converter/integration_tests/test_cases/texture/input/pack/somedir/texture_three.png create mode 100644 xml_converter/integration_tests/test_cases/texture/input/pack/texture_one.png create mode 100644 xml_converter/integration_tests/test_cases/texture/input/pack/texture_two.png delete mode 100644 xml_converter/integration_tests/test_cases/texture/output_proto/my_texture.png delete mode 100644 xml_converter/integration_tests/test_cases/texture/output_proto/my_texture2.png delete mode 100644 xml_converter/integration_tests/test_cases/texture/output_proto/somedir/my_texture3.png create mode 100644 xml_converter/integration_tests/test_cases/texture/output_proto/somedir/texture_three.png create mode 100644 xml_converter/integration_tests/test_cases/texture/output_proto/texture_one.png create mode 100644 xml_converter/integration_tests/test_cases/texture/output_proto/texture_two.png delete mode 100644 xml_converter/integration_tests/test_cases/texture/output_xml/my_texture.png delete mode 100644 xml_converter/integration_tests/test_cases/texture/output_xml/my_texture2.png delete mode 100644 xml_converter/integration_tests/test_cases/texture/output_xml/somedir/my_texture3.png create mode 100644 xml_converter/integration_tests/test_cases/texture/output_xml/somedir/texture_three.png create mode 100644 xml_converter/integration_tests/test_cases/texture/output_xml/texture_one.png create mode 100644 xml_converter/integration_tests/test_cases/texture/output_xml/texture_two.png diff --git a/xml_converter/integration_tests/test_cases/texture/input/pack/my_texture.png b/xml_converter/integration_tests/test_cases/texture/input/pack/my_texture.png deleted file mode 100644 index 56c45ea1f83feb7fa9ecdffe6a7c6396594a4dce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5881 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 zalhTfG3NGg59vzvu<2yzvj6}9000000000000000000000000009fK52X{qEXnJy< P00000NkvXXu0mjfm(VbP diff --git a/xml_converter/integration_tests/test_cases/texture/input/pack/my_texture2.png b/xml_converter/integration_tests/test_cases/texture/input/pack/my_texture2.png deleted file mode 100644 index 21a80261d86c0235b084608c7558c247f3968707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13277 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 literal 0 HcmV?d00001 diff --git a/xml_converter/integration_tests/test_cases/texture/input/pack/texture_one.png b/xml_converter/integration_tests/test_cases/texture/input/pack/texture_one.png new file mode 100644 index 0000000000000000000000000000000000000000..5b7d11285e8f0343fabbd63aef707b59b4f7b5de GIT binary patch literal 6530 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 Dw)l`f literal 0 HcmV?d00001 diff --git a/xml_converter/integration_tests/test_cases/texture/input/pack/xml_file.xml b/xml_converter/integration_tests/test_cases/texture/input/pack/xml_file.xml index 490a4897..d7135b25 100644 --- a/xml_converter/integration_tests/test_cases/texture/input/pack/xml_file.xml +++ b/xml_converter/integration_tests/test_cases/texture/input/pack/xml_file.xml @@ -3,9 +3,9 @@ - - - - + + + + diff --git a/xml_converter/integration_tests/test_cases/texture/output_proto/markers.bin b/xml_converter/integration_tests/test_cases/texture/output_proto/markers.bin index 075d211766ee2275192b9b90f632d64e74d7c8e3..93077c5eb122f69af81166d1da1c8db24deb58fe 100644 GIT binary patch delta 71 zcmXRen_%K3$i-ihT2WG3lp3F(m#SBgmo9`PR8pP~7Lw+YEY8nOP01|Mhp8^fC`tvZ F2LNlM86^M! delta 68 zcmXRbo?v1xz{Qta8DElGQBqozs#lPgE+ojsj}S2e3rTW`7w6}ureqfBBczN$QUDcL B7k>Z% diff --git a/xml_converter/integration_tests/test_cases/texture/output_proto/my_texture.png b/xml_converter/integration_tests/test_cases/texture/output_proto/my_texture.png deleted file mode 100644 index 56c45ea1f83feb7fa9ecdffe6a7c6396594a4dce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5881 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 zalhTfG3NGg59vzvu<2yzvj6}9000000000000000000000000009fK52X{qEXnJy< P00000NkvXXu0mjfm(VbP diff --git a/xml_converter/integration_tests/test_cases/texture/output_proto/my_texture2.png b/xml_converter/integration_tests/test_cases/texture/output_proto/my_texture2.png deleted file mode 100644 index 21a80261d86c0235b084608c7558c247f3968707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13277 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 literal 0 HcmV?d00001 diff --git a/xml_converter/integration_tests/test_cases/texture/output_proto/texture_one.png b/xml_converter/integration_tests/test_cases/texture/output_proto/texture_one.png new file mode 100644 index 0000000000000000000000000000000000000000..5b7d11285e8f0343fabbd63aef707b59b4f7b5de GIT binary patch literal 6530 zcmeHMc{tSD{~wVxdu1t1qwKRU7$mzPyJXjF7-6QFk)>q0wp)@)$`*<&Awsz%d)7jw zLb8<*KegA8o=QDFY=e*vp_j$k0`<&-}p84I@+DuqbRuBXN z2@}kX?SWq*;1T5K1-?o1dA|W|xiCj(wmmTz%wW>JY5r6&JCs2MQ$uLpAW+CqsY}4o z8L-G&ubQ_2@2;5CmWvP4Etlzb?$iLsIX)E zK%YL&_wKzL!Q38_XWdd5s2fr5WfL9_irwHEqSE@+<}UU<4ZZVDf5bMN_7O5jZV+a! z>j>S^l#x=+H#sYET+)L#If9uJC)pgloACOT>Hd>*#tS!jL_%K{+`iZhVLANOVy)0$ zn>CVK{Z_bIr;1ry+n05|dw5}dN$e9+ZFp(U`@s_4QsKsV`I)Ne2P`L z+&#)nMpA2f`$XUO>e zyEHlSfCUW%X>g9py2dpNp+=ZlZrY-JAV&)~oAxjRdc@{>JO8m;C)0e4pKe7uw?b_i zS}HX!g{rhp-*s08m8uI?C#G_UF|x+8b|*l5GfgPWpfJ(tDov~Fb^v6CWF zB5{2&Nr{s(FuN%%$UUY==AQAUP5Yn{?GmB{0x3pO9ps0Q<4VDcCG^mmJ5qiZEHCOT zxCfO8e%dNZkthpwxF@x<*zzFS_P&ZU?iPtO@OWs4pHxZq3!9wn@W&5L zyL7sC_|>Q}cR*@0%gMZr_8sC0r;I>`%I&j-$k#7Bw7uh%j5jMwcP0%cCP|C+s4LwH zX@TWQ+L^t}W(b|rA4~N#foZXAARlCIn-yA(#@#cWO*9OCYml&ai>+JneaB9oGK(*N z)g+DA)Xl$LILKFgDu^q1A69aA?WxW+$eHE=DfcZPeT){@>G-Ah-_T0hEvLQFPUj>C7TR?E|%>5RD25QbhVCH zl?NgyYl8dL-4gRtx5dj=D%Mx{r*@S^)J2bN!Y(1BzD50Cc%`Kz#kLd%w ze>?g(ZJdio{#BszOq4^cdWCJxmSOKr9gZ4emn3Y{e{JxhrRgFK8Zj!|M6w#Nl^h?Qxm;&=^JNaeoK zu{R6MlW*qZ4`olqZYFv#jNgbkl_dClY^*p>d;ljbBt^^(3kF>$;GYP#B#SQ?Hj8|y z71K)Lo%eD)KYxJxR#KG4;T9W@5%q+&x6-M%QfKd7@BFK+ygs7ZEmzJ+{oEg4lI=WJ zP8wuY^zln6X#_?h8q1kOg;Be2@^uNkzvfo=SMZ1VqiA~O_Cej#?ul}K$MXCAo{99% z8!gM^;0<|*X3`x=uWF^LKz-5tMzb};uD?Kr&2eE z4{UG33H)KGTJNeJ9WK7#Qy#7`;cX_oiZ;o)GVi)`cJ`im2i8d~c4=Qpkm3BX-LvL_ zl6l#ZI}&A4CvV1s>@(N)XKlawr1X9%yoXN(Y_?q~FV{&`)$ow|lB~hD^!T7)1R=pE$DgrH+;30n<%M|nD$()C<;-{|Ab1p@vK&-$6r zt$gk$w?XAS*RymY(&y!D&b33Mo~nr@2u>9mm`I@#N(vIa{hOS|hVsqPD*wEaUsx7dy(g72^I?%WI*!gi)Xr_c`IE4O_L(oRy>o=v8s?%d_`t_!>~mee zEhITf6(zq3R9@fp+#xSF{*;`~_RR>ki}Uxt~q+!mJCL4;n6&SjWz>r)9DP zy#y|-*2<4}=qMDsj`6%S%4fp4OBUi&+pl0mdRKdotH}B6tQq;_(4{7sy}w1& z(M%;iwjc3!)A>J!4R9$vdNZ&GK9}Rp4K1Iad5CKWRw`>Rdu|*0lwtLy!0?U|93{R- zC9~gcOB&9+LQIhrqW3$ZqDfk(RByy!M|IIY*Wl{MYFAUe>YO*3t#X|`eRONe{f8pz zmmx6d5gMIAOgicAxpE~kg`N{vEsa)lGx5gT{aMslF#38>#j6_YSt)Yx9hhRzGW?v~8^NjUf*v~_hTfFm_`)e zwlu==Q_jy|AN})egeE+kf(EY!T%YzHNW~o+ z&1?xg;CMILd6*e~R?oa;-_ABKhkVF31DymdN};urv58!@ph=;aU#yede%P8=I%c;j zEGhbMQ`4EY;@?hHmWh-_gFkXj%#P(vL-u@ut5zi}jMXU2z0-U5g3GY96>~jcYae@f z|DFkwQXM4DQ`}fIQZ=!o2j#s-RbX@>=nTkfj-=bY{yh7t<$aee{0Xh-9z?)I&_t)z z@Yo%jokSCtJ$seqac`nq&$u7dJu&Ida2ZPzM`xugCW)Pj-R|UiX`9vQkZ7%9Km02p znKK6-xMfz`$70`gdPzTc({1TqpdHDxy_{bFvemIXO2WU@cYsild}XcXOvC7s8F%cfk99M7Q4IdXeZHmJ#G%!2;88++*U z`S*Sfr{uXth8x?092}N`k}+qlGudkJLNq4!xO|BIReIN^`rG?n7e93)D-?+CORu$f z0pg2qw2iv?^!SUB{-NOpAKA4vP+kMGPMaV;1{CzNG@x*Iw%U&;(*s~c3Y|oSg#<8w z!X5RVNAl3?D#W14!(#*q{REIEYM{?Lx zzgJK<1P>4dP}xLqNPvGJ3m>8f+2F+kZB92F0^WeI59>jkt!%+YbS4#yfni_>s7VOz zCmszK!9=Z_xS}dtgQZ~4`h8)0nh^;LS(>^ zFa$gx0RE!|i*0fgAo(_-|7yW<1nxg@dn$__#3WNqj#2~Jia%0N$bZ{2f|&jr;ZVqM zsy{UVfU*Fu$e&!A5v*+gw%|zMLknPRSOH@Hgk;ma{}Jn_xp77|!ufF`fcf9NKcTBqCG`OT|JlI20O6LSr?dI0Qvo zQ&W=!45NOaA_TJ7#6U8YLj{n-XaEltMZ#&3(PSu+Od>%sS{N);OPfl8Y7)^D5(Psf zVzm)JP}neOKvoj{f1DMEiULrP00u2BfJMt2gMnha(G(~Ng~ma(02UNNn@pyBqoR=U zrgUZi5m-)I0MUmEX9W6e_}~bRH?Sq>K~S)-UN?Gd{fTUEz(5bOpB5Mt@(|V~{8$2Kf)jiOOUFnaJTpB4FsRyqsmh1Hk~o5;=Ja5PXjkZ^Wb$ z*>t8Oo$jv(;Y+u|F&2}KuZLL3dNu?z+w@#D1g?QSSSjM)xv1w zw1EV`{>;vzd$WUyOsato5GfE1kU$&JfK@i6RQ(wp>`Ue7gg{}S2s9L_>4-w$vD$bb ztq>SI0s(=43mDGX)!!r5h5sK-bTIq$7oqxWfjz5Cmfb zN9jl8)!xSW>?rfb7+52J8_za0YV0k=~n#p!5z>r3n^9 zDT)YU!9tUErHOzjf&%ge^m@JXy?^e^_x`(?IXUO-{j6uL_3X9xWKE*XO%3_D#kfHr z5Fg$MXTiMlFfVRScILO!LO}=!#4G1duwhsbeZgKdstefz05i^b0bsz7>;eM$^;cYV z_Zh_O2;HFXs%5>%x?-~N3}y-uRK` zt0l3M5#K*XDE6$q1M*yR-9*?-Cs0Sv%SDfVzkg7;?%{KS@pm7d^Ft3OzYp-W-*{l% zFx8F#KT`r;_!msBghz=vP*>S6pF>#kV8WQ^0X?03p_Br_}-=;L$BS3M4J4Dwa@m{ z^kntvUkWXIQG2ZcnuU5GnB`Qm(_i+Xb5?i)T(R46H5zjRpdQPc?-`?bYj9 zd1V_BTw^R4q`BtX>9J4ez^1SI85#E}4|C`tnfQThBYo%5U|{_4+XEZp_tvQn@|%CBA?A zd*69j&V*!di%uu|gl}(S+NXh?Z>Mm4C=idSR-|i4VBn7MzGHWc;D7Mema*69ZZ{|; zsx?Wm2iKf?`eFDwebk^gaaDToL<)an*s%VSJq!oj+}S~GJ<9PtVjR^6c)G7y%dFmz zgeHr8d!ikGI`g2>(CSoWDo^v-wK8FRr{ddCT!82hsn_%L+V1-F*GT+S>IXI3Fu4MVd>5zS(Egy|~79VA=b+(p_L!yD-u)%3mrk;{8_x z&iU0F7U@82iM4D`{jr1ri0zG}a9xS}@8f0_S0Kydx3$$(kCu{<>F=*zlTkc_H1 zvpAmQ_e&g>gQ&)X*<)GvgF5y)&utJB zX*VxI?xwJYsZhY(ti~>b`MtBbKvZ|$CE)3)NnY3H%(a>7dp#+3B0LijV)Z5&GXf#) zyfQYVz4afeoiydlAUpLB-;1r`Y>P{I(Wb5J*r~$xN<-(BVrr&%+N~-*r^(cP{vZ*d z&@feVxd&`~+PziMDf4_jJ&#KEEgTYW9IrHoeLtRJaj9eJ?9)Hs4hGR#Y}V->Pm=^3 zT4~N3FI{Gy$q5o=E@p=+`Mddm1fm`UtcpK&Se98MD4WYK>MaJk<1&lG3c8NoA4Sy% zOvM=P+=q~^EDGy8LUD3T#V>sq7(Ure)8BY-2f2SjTQdFl$fIjlQ#X<_@GdFQuj@=m`y5Q%jYw8WIL;(y&dhrx!t-7uM0AKHhRoNY@YEk74|spnt8M>MB=+EqoAje_nfxN* z!?)ATn_4^9F@@`ED<5!JmnI3H=juLriR_t4Shr7|ng3E!^y~}wqv2X0EtT$b{@qjnImb`N zid8iUQK0I2a&M(}*V~2Q*nm^b2bbvHFGSz;g-`-9p;HI$i>})AKG8jJXaR?pS9J?^ z!MW=5h@E{JqkJ5qnAgL4YvgXHbMM}r9=bL@F(dW#*^BH{eFti8nwT;!gmx<00e2&= z|CPs40>oRjTi22_WK{J&4N)vnSKlXPAQlJdaL4W4wQpT_E&I9bi#^)qJG@s`OS|$% z*G`VE_EK1Vt+M(#;&rmqxYG>d40%mZDi7;qT9R}o2+`6t8EI5vx&V;dWiIn_w4VJ$ zO-F6thb8lpm59TG!y}M8@fjqZ5brHJt%J8{Jti12<1vY^`>Z3ZT@n5q$6uq}e+E*emss3k zVmoaJ4O;!gzBtD^_|WRmYQ&DwyI07sx?RI0E3o%Ia_+zKtw^GiFH`%&H?$T8`poLe zVcEO(eS--BBsqe#?fuUM=rBo5yd0MICfDqu=$lvPD>bJ5U1O4UPTAs1T&Q93YdUr5 z$92YzYuasaS}x05mcBAqI)SXZC@{&IdF9+QTx&#h0Z+$HbBydR_cITM7R@oR@ug{x zwWr?N>tAo|mvmp++6K3>!jux)R7n%YF4VUMa^5LTRitg`@U92%= zi2+YoD@HCQJxcnNN1}ce5tbf{_l(?;o07)RWmrnkBqesy=e6Gm4)baO9X5p0uaCM4|G-nC9^eOxJm z{T_BD&?eq&kwVvj&UyKsyO809hUtDbWJOuwKB`z+!s7du!n4_b*@=NIBP zbTN(%XlQFFBjsM^pTfW2FiTaM!m9_Q+J`~R&g`vAEGw9q5vq>x6nPW#;CRTWd|8*x zfx}P`=@VV8^c<&EBQ(IbNT}`TlW}ZJ@$|||jh7`A(m`cCUPsF>o1dMl%Sl{~`s4jj zPj^_oxI%)}#0_`ZbW$^~a+Oc7V^85-yO-;OBh-|&)LlaZNs{UdA;5(i+vRtK+v5&> z`h3Hwz^iX#ti--sKWIGiq02XT`BzpKrFYBeY0a~8a5)<54MUZ%dmYQhJ!#X zp=3QhbG)A3pB)3UPslib5o^?XNW9&_vJkRM=Rl-}bBU=HPJdrLw|?_2CuM;&5jgIL1e$f6zU>BjxCC#!5;W+HFm|;0Uv`6C*P_I2)5A7!sADLUg7& z0V;kJFJ^}a0%;xe^CFVm0S4F!a3y#O36QlZjZVF*o4O&A;rLn5I} z1eAWplR@-@deWsgDSmL^06K|A_F|B!p5RSRq7&7dfrUVr^WZ<@qj;H^{G#`y|5Smg z2h5M?1w*L7VH67NcMCd0--k)^Gob%!K_@U9VVDI#r+U*!fW8ml$&mh?!kP5T-piZj zv6YT92?lro6eg6;^osbKOGCVg`7eu230%n(uPrO4*ndMZ$S!}0^|#nIXSUM$JrJh( zFW$eQ|IB?0%tV=(U~p8D_hxu_92TRx+YYU z2q!{S)zL^zK!b=NBAtGt!h6ygL{Ad1NyQ{rAv1a40MSWR0|20EB(w$;tqGu^nkXk# zs0I;0s;QyjE^t-V-zdyzWM)+oJ${dBlggP%rG_SII%_xsP$FEz35s?`I6;XnY6vI^ z4oAZ^HB{9QF3ww2&LoThl|~^lmy=8(x&kmSPuH!9O~Elb=6EawsRI9N#N30(aA6u? zAxFrb-hO{g5Xcn3l0n>56QPcPt0Pfr8fs`H3XW3$3uFb*=*&vo_Q)$Xioj@K)Jkh@>A*=tLjjhXzc$A5$bZqNgjs+}}S7>d$fVe_1RPN(1Et*HDAP z;Ybt|t)Z$8C8AXkP$U|GaCQOI5hzXMRvN$9=~NenFOdf5xH2jU6roN)A~0|S2FY}Y#=zka*w2Jvo4fkYjJ06@M-#0rz;DL@)9%L@ z^LSyNR} z>;FwI?!Ouyz?1na$d}p9z?XLa?cf)BT+JQDi6NNPCJKpxX1sWJ#}uPRH=X14O>vdFj=}!{ Dw)l`f literal 0 HcmV?d00001 diff --git a/xml_converter/integration_tests/test_cases/texture/output_xml/my_texture.png b/xml_converter/integration_tests/test_cases/texture/output_xml/my_texture.png deleted file mode 100644 index 56c45ea1f83feb7fa9ecdffe6a7c6396594a4dce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5881 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 zalhTfG3NGg59vzvu<2yzvj6}9000000000000000000000000009fK52X{qEXnJy< P00000NkvXXu0mjfm(VbP diff --git a/xml_converter/integration_tests/test_cases/texture/output_xml/my_texture2.png b/xml_converter/integration_tests/test_cases/texture/output_xml/my_texture2.png deleted file mode 100644 index 21a80261d86c0235b084608c7558c247f3968707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13277 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 literal 0 HcmV?d00001 diff --git a/xml_converter/integration_tests/test_cases/texture/output_xml/texture_one.png b/xml_converter/integration_tests/test_cases/texture/output_xml/texture_one.png new file mode 100644 index 0000000000000000000000000000000000000000..5b7d11285e8f0343fabbd63aef707b59b4f7b5de GIT binary patch literal 6530 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 Dw)l`f literal 0 HcmV?d00001 diff --git a/xml_converter/integration_tests/test_cases/texture/output_xml/xml_file.xml b/xml_converter/integration_tests/test_cases/texture/output_xml/xml_file.xml index 5af46f44..5fa93e32 100644 --- a/xml_converter/integration_tests/test_cases/texture/output_xml/xml_file.xml +++ b/xml_converter/integration_tests/test_cases/texture/output_xml/xml_file.xml @@ -3,9 +3,9 @@ - - - - + + + + From e092bcc8630bc968827ea77b20d48db38dc6affc Mon Sep 17 00:00:00 2001 From: klingbolt Date: Sat, 20 Apr 2024 18:56:29 -0400 Subject: [PATCH 11/11] removed metadata from images --- .../input/pack/somedir/texture_three.png | Bin 8184 -> 105 bytes .../texture/input/pack/texture_one.png | Bin 6530 -> 99 bytes .../texture/input/pack/texture_two.png | Bin 7066 -> 109 bytes .../output_proto/somedir/texture_three.png | Bin 8184 -> 105 bytes .../texture/output_proto/texture_one.png | Bin 6530 -> 99 bytes .../texture/output_proto/texture_two.png | Bin 7066 -> 109 bytes .../output_xml/somedir/texture_three.png | Bin 8184 -> 105 bytes .../texture/output_xml/texture_one.png | Bin 6530 -> 99 bytes .../texture/output_xml/texture_two.png | Bin 7066 -> 109 bytes 9 files changed, 0 insertions(+), 0 deletions(-) diff --git a/xml_converter/integration_tests/test_cases/texture/input/pack/somedir/texture_three.png b/xml_converter/integration_tests/test_cases/texture/input/pack/somedir/texture_three.png index 5070d39284dde6276966b1c826e5b26e3707945d..3faad497c7014401f2a8b43c0fb9c33ee9faaaa2 100644 GIT binary patch delta 87 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 diff --git a/xml_converter/integration_tests/test_cases/texture/input/pack/texture_one.png b/xml_converter/integration_tests/test_cases/texture/input/pack/texture_one.png index 5b7d11285e8f0343fabbd63aef707b59b4f7b5de..392885bb045268983c0e7f9a7151abceeebad090 100644 GIT binary patch delta 81 zcmZoNPM#p)&B)Bazz|_)b^u7R1^9%x{s%G`7#tT1fg~h6T^vI=t|uoXBs@q=5J*f& eaCH6Tz{$qIa+M+E%Ahn*ZelF{r5}E)WwiVL= literal 6530 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 Dw)l`f diff --git a/xml_converter/integration_tests/test_cases/texture/output_proto/somedir/texture_three.png b/xml_converter/integration_tests/test_cases/texture/output_proto/somedir/texture_three.png index 5070d39284dde6276966b1c826e5b26e3707945d..3faad497c7014401f2a8b43c0fb9c33ee9faaaa2 100644 GIT binary patch delta 87 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 diff --git a/xml_converter/integration_tests/test_cases/texture/output_proto/texture_one.png b/xml_converter/integration_tests/test_cases/texture/output_proto/texture_one.png index 5b7d11285e8f0343fabbd63aef707b59b4f7b5de..392885bb045268983c0e7f9a7151abceeebad090 100644 GIT binary patch delta 81 zcmZoNPM#p)&B)Bazz|_)b^u7R1^9%x{s%G`7#tT1fg~h6T^vI=t|uoXBs@q=5J*f& eaCH6Tz{$qIa+M+E%Ahn*ZelF{r5}E)WwiVL= literal 6530 zcmeHMc{tSD{~wVxdu1t1qwKRU7$mzPyJXjF7-6QFk)>q0wp)@)$`*<&Awsz%d)7jw zLb8<*KegA8o=QDFY=e*vp_j$k0`<&-}p84I@+DuqbRuBXN z2@}kX?SWq*;1T5K1-?o1dA|W|xiCj(wmmTz%wW>JY5r6&JCs2MQ$uLpAW+CqsY}4o z8L-G&ubQ_2@2;5CmWvP4Etlzb?$iLsIX)E zK%YL&_wKzL!Q38_XWdd5s2fr5WfL9_irwHEqSE@+<}UU<4ZZVDf5bMN_7O5jZV+a! z>j>S^l#x=+H#sYET+)L#If9uJC)pgloACOT>Hd>*#tS!jL_%K{+`iZhVLANOVy)0$ zn>CVK{Z_bIr;1ry+n05|dw5}dN$e9+ZFp(U`@s_4QsKsV`I)Ne2P`L z+&#)nMpA2f`$XUO>e zyEHlSfCUW%X>g9py2dpNp+=ZlZrY-JAV&)~oAxjRdc@{>JO8m;C)0e4pKe7uw?b_i zS}HX!g{rhp-*s08m8uI?C#G_UF|x+8b|*l5GfgPWpfJ(tDov~Fb^v6CWF zB5{2&Nr{s(FuN%%$UUY==AQAUP5Yn{?GmB{0x3pO9ps0Q<4VDcCG^mmJ5qiZEHCOT zxCfO8e%dNZkthpwxF@x<*zzFS_P&ZU?iPtO@OWs4pHxZq3!9wn@W&5L zyL7sC_|>Q}cR*@0%gMZr_8sC0r;I>`%I&j-$k#7Bw7uh%j5jMwcP0%cCP|C+s4LwH zX@TWQ+L^t}W(b|rA4~N#foZXAARlCIn-yA(#@#cWO*9OCYml&ai>+JneaB9oGK(*N z)g+DA)Xl$LILKFgDu^q1A69aA?WxW+$eHE=DfcZPeT){@>G-Ah-_T0hEvLQFPUj>C7TR?E|%>5RD25QbhVCH zl?NgyYl8dL-4gRtx5dj=D%Mx{r*@S^)J2bN!Y(1BzD50Cc%`Kz#kLd%w ze>?g(ZJdio{#BszOq4^cdWCJxmSOKr9gZ4emn3Y{e{JxhrRgFK8Zj!|M6w#Nl^h?Qxm;&=^JNaeoK zu{R6MlW*qZ4`olqZYFv#jNgbkl_dClY^*p>d;ljbBt^^(3kF>$;GYP#B#SQ?Hj8|y z71K)Lo%eD)KYxJxR#KG4;T9W@5%q+&x6-M%QfKd7@BFK+ygs7ZEmzJ+{oEg4lI=WJ zP8wuY^zln6X#_?h8q1kOg;Be2@^uNkzvfo=SMZ1VqiA~O_Cej#?ul}K$MXCAo{99% z8!gM^;0<|*X3`x=uWF^LKz-5tMzb};uD?Kr&2eE z4{UG33H)KGTJNeJ9WK7#Qy#7`;cX_oiZ;o)GVi)`cJ`im2i8d~c4=Qpkm3BX-LvL_ zl6l#ZI}&A4CvV1s>@(N)XKlawr1X9%yoXN(Y_?q~FV{&`)$ow|lB~hD^!T7)1R=pE$DgrH+;30n<%M|nD$()C<;-{|Ab1p@vK&-$6r zt$gk$w?XAS*RymY(&y!D&b33Mo~nr@2u>9mm`I@#N(vIa{hOS|hVsqPD*wEaUsx7dy(g72^I?%WI*!gi)Xr_c`IE4O_L(oRy>o=v8s?%d_`t_!>~mee zEhITf6(zq3R9@fp+#xSF{*;`~_RR>ki}Uxt~q+!mJCL4;n6&SjWz>r)9DP zy#y|-*2<4}=qMDsj`6%S%4fp4OBUi&+pl0mdRKdotH}B6tQq;_(4{7sy}w1& z(M%;iwjc3!)A>J!4R9$vdNZ&GK9}Rp4K1Iad5CKWRw`>Rdu|*0lwtLy!0?U|93{R- zC9~gcOB&9+LQIhrqW3$ZqDfk(RByy!M|IIY*Wl{MYFAUe>YO*3t#X|`eRONe{f8pz zmmx6d5gMIAOgicAxpE~kg`N{vEsa)lGx5gT{aMslF#38>#j6_YSt)Yx9hhRzGW?v~8^NjUf*v~_hTfFm_`)e zwlu==Q_jy|AN})egeE+kf(EY!T%YzHNW~o+ z&1?xg;CMILd6*e~R?oa;-_ABKhkVF31DymdN};urv58!@ph=;aU#yede%P8=I%c;j zEGhbMQ`4EY;@?hHmWh-_gFkXj%#P(vL-u@ut5zi}jMXU2z0-U5g3GY96>~jcYae@f z|DFkwQXM4DQ`}fIQZ=!o2j#s-RbX@>=nTkfj-=bY{yh7t<$aee{0Xh-9z?)I&_t)z z@Yo%jokSCtJ$seqac`nq&$u7dJu&Ida2ZPzM`xugCW)Pj-R|UiX`9vQkZ7%9Km02p znKK6-xMfz`$70`gdPzTc({1TqpdHDxy_{bFvemIXO2WU@cYsild}XcXOvC7s8F%cfk99M7Q4IdXeZHmJ#G%!2;88++*U z`S*Sfr{uXth8x?092}N`k}+qlGudkJLNq4!xO|BIReIN^`rG?n7e93)D-?+CORu$f z0pg2qw2iv?^!SUB{-NOpAKA4vP+kMGPMaV;1{CzNG@x*Iw%U&;(*s~c3Y|oSg#<8w z!X5RVNAl3?D#W14!(#*q{REIEYM{?Lx zzgJK<1P>4dP}xLqNPvGJ3m>8f+2F+kZB92F0^WeI59>jkt!%+YbS4#yfni_>s7VOz zCmszK!9=Z_xS}dtgQZ~4`h8)0nh^;LS(>^ zFa$gx0RE!|i*0fgAo(_-|7yW<1nxg@dn$__#3WNqj#2~Jia%0N$bZ{2f|&jr;ZVqM zsy{UVfU*Fu$e&!A5v*+gw%|zMLknPRSOH@Hgk;ma{}Jn_xp77|!ufF`fcf9NKcTBqCG`OT|JlI20O6LSr?dI0Qvo zQ&W=!45NOaA_TJ7#6U8YLj{n-XaEltMZ#&3(PSu+Od>%sS{N);OPfl8Y7)^D5(Psf zVzm)JP}neOKvoj{f1DMEiULrP00u2BfJMt2gMnha(G(~Ng~ma(02UNNn@pyBqoR=U zrgUZi5m-)I0MUmEX9W6e_}~bRH?Sq>K~S)-UN?Gd{fTUEz(5bOpB5Mt@(|V~{8$2Kf)jiOOUFnaJTpB4FsRyqsmh1Hk~o5;=Ja5PXjkZ^Wb$ z*>t8Oo$jv(;Y+u|F&2}KuZLL3dNu?z+w@#D1g?QSSSjM)xv1w zw1EV`{>;vzd$WUyOsato5GfE1kU$&JfK@i6RQ(wp>`Ue7gg{}S2s9L_>4-w$vD$bb ztq>SI0s(=43mDGX)!!r5h5sK-bTIq$7oqxWfjz5Cmfb zN9jl8)!xSW>?rfb7+52J8_za0YV0;RBr3-AeXWnlOZWL78bw*yj2o-U3d9M^eIZscW9;9%I0 rBr}I2=D`2>r0Y(XSlUl7o*^&B@`)jCK9|=7plSwBS3j3^P6k=~n#p!5z>r3n^9 zDT)YU!9tUErHOzjf&%ge^m@JXy?^e^_x`(?IXUO-{j6uL_3X9xWKE*XO%3_D#kfHr z5Fg$MXTiMlFfVRScILO!LO}=!#4G1duwhsbeZgKdstefz05i^b0bsz7>;eM$^;cYV z_Zh_O2;HFXs%5>%x?-~N3}y-uRK` zt0l3M5#K*XDE6$q1M*yR-9*?-Cs0Sv%SDfVzkg7;?%{KS@pm7d^Ft3OzYp-W-*{l% zFx8F#KT`r;_!msBghz=vP*>S6pF>#kV8WQ^0X?03p_Br_}-=;L$BS3M4J4Dwa@m{ z^kntvUkWXIQG2ZcnuU5GnB`Qm(_i+Xb5?i)T(R46H5zjRpdQPc?-`?bYj9 zd1V_BTw^R4q`BtX>9J4ez^1SI85#E}4|C`tnfQThBYo%5U|{_4+XEZp_tvQn@|%CBA?A zd*69j&V*!di%uu|gl}(S+NXh?Z>Mm4C=idSR-|i4VBn7MzGHWc;D7Mema*69ZZ{|; zsx?Wm2iKf?`eFDwebk^gaaDToL<)an*s%VSJq!oj+}S~GJ<9PtVjR^6c)G7y%dFmz zgeHr8d!ikGI`g2>(CSoWDo^v-wK8FRr{ddCT!82hsn_%L+V1-F*GT+S>IXI3Fu4MVd>5zS(Egy|~79VA=b+(p_L!yD-u)%3mrk;{8_x z&iU0F7U@82iM4D`{jr1ri0zG}a9xS}@8f0_S0Kydx3$$(kCu{<>F=*zlTkc_H1 zvpAmQ_e&g>gQ&)X*<)GvgF5y)&utJB zX*VxI?xwJYsZhY(ti~>b`MtBbKvZ|$CE)3)NnY3H%(a>7dp#+3B0LijV)Z5&GXf#) zyfQYVz4afeoiydlAUpLB-;1r`Y>P{I(Wb5J*r~$xN<-(BVrr&%+N~-*r^(cP{vZ*d z&@feVxd&`~+PziMDf4_jJ&#KEEgTYW9IrHoeLtRJaj9eJ?9)Hs4hGR#Y}V->Pm=^3 zT4~N3FI{Gy$q5o=E@p=+`Mddm1fm`UtcpK&Se98MD4WYK>MaJk<1&lG3c8NoA4Sy% zOvM=P+=q~^EDGy8LUD3T#V>sq7(Ure)8BY-2f2SjTQdFl$fIjlQ#X<_@GdFQuj@=m`y5Q%jYw8WIL;(y&dhrx!t-7uM0AKHhRoNY@YEk74|spnt8M>MB=+EqoAje_nfxN* z!?)ATn_4^9F@@`ED<5!JmnI3H=juLriR_t4Shr7|ng3E!^y~}wqv2X0EtT$b{@qjnImb`N zid8iUQK0I2a&M(}*V~2Q*nm^b2bbvHFGSz;g-`-9p;HI$i>})AKG8jJXaR?pS9J?^ z!MW=5h@E{JqkJ5qnAgL4YvgXHbMM}r9=bL@F(dW#*^BH{eFti8nwT;!gmx<00e2&= z|CPs40>oRjTi22_WK{J&4N)vnSKlXPAQlJdaL4W4wQpT_E&I9bi#^)qJG@s`OS|$% z*G`VE_EK1Vt+M(#;&rmqxYG>d40%mZDi7;qT9R}o2+`6t8EI5vx&V;dWiIn_w4VJ$ zO-F6thb8lpm59TG!y}M8@fjqZ5brHJt%J8{Jti12<1vY^`>Z3ZT@n5q$6uq}e+E*emss3k zVmoaJ4O;!gzBtD^_|WRmYQ&DwyI07sx?RI0E3o%Ia_+zKtw^GiFH`%&H?$T8`poLe zVcEO(eS--BBsqe#?fuUM=rBo5yd0MICfDqu=$lvPD>bJ5U1O4UPTAs1T&Q93YdUr5 z$92YzYuasaS}x05mcBAqI)SXZC@{&IdF9+QTx&#h0Z+$HbBydR_cITM7R@oR@ug{x zwWr?N>tAo|mvmp++6K3>!jux)R7n%YF4VUMa^5LTRitg`@U92%= zi2+YoD@HCQJxcnNN1}ce5tbf{_l(?;o07)RWmrnkBqesy=e6Gm4)baO9X5p0uaCM4|G-nC9^eOxJm z{T_BD&?eq&kwVvj&UyKsyO809hUtDbWJOuwKB`z+!s7du!n4_b*@=NIBP zbTN(%XlQFFBjsM^pTfW2FiTaM!m9_Q+J`~R&g`vAEGw9q5vq>x6nPW#;CRTWd|8*x zfx}P`=@VV8^c<&EBQ(IbNT}`TlW}ZJ@$|||jh7`A(m`cCUPsF>o1dMl%Sl{~`s4jj zPj^_oxI%)}#0_`ZbW$^~a+Oc7V^85-yO-;OBh-|&)LlaZNs{UdA;5(i+vRtK+v5&> z`h3Hwz^iX#ti--sKWIGiq02XT`BzpKrFYBeY0a~8a5)<54MUZ%dmYQhJ!#X zp=3QhbG)A3pB)3UPslib5o^?XNW9&_vJkRM=Rl-}bBU=HPJdrLw|?_2CuM;&5jgIL1e$f6zU>BjxCC#!5;W+HFm|;0Uv`6C*P_I2)5A7!sADLUg7& z0V;kJFJ^}a0%;xe^CFVm0S4F!a3y#O36QlZjZVF*o4O&A;rLn5I} z1eAWplR@-@deWsgDSmL^06K|A_F|B!p5RSRq7&7dfrUVr^WZ<@qj;H^{G#`y|5Smg z2h5M?1w*L7VH67NcMCd0--k)^Gob%!K_@U9VVDI#r+U*!fW8ml$&mh?!kP5T-piZj zv6YT92?lro6eg6;^osbKOGCVg`7eu230%n(uPrO4*ndMZ$S!}0^|#nIXSUM$JrJh( zFW$eQ|IB?0%tV=(U~p8D_hxu_92TRx+YYU z2q!{S)zL^zK!b=NBAtGt!h6ygL{Ad1NyQ{rAv1a40MSWR0|20EB(w$;tqGu^nkXk# zs0I;0s;QyjE^t-V-zdyzWM)+oJ${dBlggP%rG_SII%_xsP$FEz35s?`I6;XnY6vI^ z4oAZ^HB{9QF3ww2&LoThl|~^lmy=8(x&kmSPuH!9O~Elb=6EawsRI9N#N30(aA6u? zAxFrb-hO{g5Xcn3l0n>56QPcPt0Pfr8fs`H3XW3$3uFb*=*&vo_Q)$Xioj@K)Jkh@>A*=tLjjhXzc$A5$bZqNgjs+}}S7>d$fVe_1RPN(1Et*HDAP z;Ybt|t)Z$8C8AXkP$U|GaCQOI5hzXMRvN$9=~NenFOdf5xH2jU6roN)A~0|S2FY}Y#=zka*w2Jvo4fkYjJ06@M-#0rz;DL@)9%L@ z^LSyNR} z>;FwI?!Ouyz?1na$d}p9z?XLa?cf)BT+JQDi6NNPCJKpxX1sWJ#}uPRH=X14O>vdFj=}!{ Dw)l`f diff --git a/xml_converter/integration_tests/test_cases/texture/output_xml/somedir/texture_three.png b/xml_converter/integration_tests/test_cases/texture/output_xml/somedir/texture_three.png index 5070d39284dde6276966b1c826e5b26e3707945d..3faad497c7014401f2a8b43c0fb9c33ee9faaaa2 100644 GIT binary patch delta 87 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 diff --git a/xml_converter/integration_tests/test_cases/texture/output_xml/texture_one.png b/xml_converter/integration_tests/test_cases/texture/output_xml/texture_one.png index 5b7d11285e8f0343fabbd63aef707b59b4f7b5de..392885bb045268983c0e7f9a7151abceeebad090 100644 GIT binary patch delta 81 zcmZoNPM#p)&B)Bazz|_)b^u7R1^9%x{s%G`7#tT1fg~h6T^vI=t|uoXBs@q=5J*f& eaCH6Tz{$qIa+M+E%Ahn*ZelF{r5}E)WwiVL= literal 6530 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 Dw)l`f