void xml_compiler::reload(void) { error_information_.clear(); replacement_.clear(); symbol_map_.clear(); app_vector_.clear(); vk_change_inputsource_map_.clear(); inputsource_vector_.clear(); identifier_map_.clear(); essential_configurations_.clear(); remapclasses_initialize_vector_.clear(); preferences_checkbox_node_tree_.clear(); preferences_number_node_tree_.clear(); try { std::string private_xml_file_path = make_file_path(private_xml_directory_, "private.xml"); // ------------------------------------------------------------ // Loading replacement { replacement_loader loader(*this, replacement_); // private.xml { ptree_ptr ptree_ptr; pqrs::string::replacement dummy; // Use dummy replacement when we read <replacementdef>. read_xml_(ptree_ptr, private_xml_file_path, dummy); if (ptree_ptr) { loader.traverse(make_extracted_ptree(*ptree_ptr, private_xml_file_path)); } } // replacementdef.xml { ptree_ptr ptree_ptr; pqrs::string::replacement dummy; // Use dummy replacement when we read <replacementdef>. std::string xml_file_path = make_file_path(system_xml_directory_, "replacementdef.xml"); read_xml_(ptree_ptr, xml_file_path, dummy); if (ptree_ptr) { loader.traverse(make_extracted_ptree(*ptree_ptr, xml_file_path)); } } } // ------------------------------------------------------------ // Then, we read private.xml with replacement and loaders share it. ptree_ptr private_xml_ptree_ptr; read_xml_(private_xml_ptree_ptr, private_xml_file_path); if (private_xml_ptree_ptr && private_xml_ptree_ptr->empty()) { private_xml_ptree_ptr.reset(); } // symbol_map { symbol_map_loader loader(*this, symbol_map_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); } loader_wrapper<symbol_map_loader>::traverse_system_xml(*this, loader, "symbol_map.xml"); } // app { app_loader loader(*this, symbol_map_, app_vector_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); } loader_wrapper<app_loader>::traverse_system_xml(*this, loader, "appdef.xml"); } // device { device_loader loader(*this, symbol_map_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); } loader_wrapper<device_loader>::traverse_system_xml(*this, loader, "devicevendordef.xml"); loader_wrapper<device_loader>::traverse_system_xml(*this, loader, "deviceproductdef.xml"); loader_wrapper<device_loader>::traverse_system_xml(*this, loader, "devicelocationdef.xml"); } // inputsource { inputsource_loader loader(*this, symbol_map_, remapclasses_initialize_vector_, identifier_map_, vk_change_inputsource_map_, inputsource_vector_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); } loader_wrapper<inputsource_loader>::traverse_system_xml(*this, loader, "vkchangeinputsourcedef.xml"); loader_wrapper<inputsource_loader>::traverse_system_xml(*this, loader, "inputsourcedef.xml"); } // config_index, remapclasses_initialize_vector, preferences_node { std::string checkbox_xml_file_path = make_file_path(system_xml_directory_, "checkbox.xml"); ptree_ptr checkbox_xml_ptree_ptr; read_xml_(checkbox_xml_ptree_ptr, checkbox_xml_file_path); std::string number_xml_file_path = make_file_path(system_xml_directory_, "number.xml"); ptree_ptr number_xml_ptree_ptr; read_xml_(number_xml_ptree_ptr, number_xml_file_path); // remapclasses_initialize_vector { // prepare { remapclasses_initialize_vector_prepare_loader<preferences_node_tree<preferences_number_node> > loader(*this, symbol_map_, essential_configurations_, &preferences_number_node_tree_); if (number_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*number_xml_ptree_ptr, number_xml_file_path)); loader.fixup(); } loader.cleanup(); } { remapclasses_initialize_vector_prepare_loader<preferences_node_tree<preferences_checkbox_node> > loader(*this, symbol_map_, essential_configurations_, &preferences_checkbox_node_tree_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); loader.fixup(); } if (checkbox_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*checkbox_xml_ptree_ptr, checkbox_xml_file_path)); loader.fixup(); } loader.cleanup(); } // ---------------------------------------- { remapclasses_initialize_vector_loader loader(*this, symbol_map_, remapclasses_initialize_vector_, identifier_map_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path), ""); } if (checkbox_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*checkbox_xml_ptree_ptr, checkbox_xml_file_path), ""); } } remapclasses_initialize_vector_.freeze(); } } } catch (std::exception& e) { error_information_.set(e.what()); } }
void read_xml_(ptree_ptr& out, const std::string& file_path) const { read_xml_(out, file_path, replacement_); }
void xml_compiler::reload(const std::string& checkbox_xml_file_name) { error_information_.clear(); replacement_warnings_.clear(); global_included_files_.clear(); replacement_.clear(); symbol_map_.clear(); modifier_map_.clear(); app_vector_.clear(); bundle_identifier_override_vector_.clear(); window_name_vector_.clear(); vk_change_inputsource_map_.clear(); inputsource_vector_.clear(); vk_open_url_map_.clear(); identifier_map_.clear(); essential_configurations_.clear(); remapclasses_initialize_vector_.clear(); preferences_checkbox_node_tree_.clear(); preferences_number_node_tree_.clear(); try { std::string private_xml_file_path = make_file_path(private_xml_directory_, "private.xml"); // ------------------------------------------------------------ // Loading replacement { replacement_loader loader(*this, replacement_); pqrs::string::replacement dummy; // Use dummy replacement when we read <replacementdef>. append_environments_to_replacement_(dummy); // private.xml { ptree_ptr ptree_ptr; read_xml_(ptree_ptr, private_xml_file_path, dummy); if (ptree_ptr) { loader.traverse(make_extracted_ptree(*ptree_ptr, private_xml_file_path, dummy)); } } // replacementdef.xml { ptree_ptr ptree_ptr; std::string xml_file_path = make_file_path(system_xml_directory_, "replacementdef.xml"); read_xml_(ptree_ptr, xml_file_path, dummy); if (ptree_ptr) { loader.traverse(make_extracted_ptree(*ptree_ptr, xml_file_path, dummy)); } } append_environments_to_replacement_(replacement_); } // Reset replacement warnings that occur during loading replacement. replacement_warnings_.clear(); // Reset global_included_files_ for each loading. global_included_files_.clear(); // ------------------------------------------------------------ // Then, we read private.xml with replacement and loaders share it. ptree_ptr private_xml_ptree_ptr; read_xml_(private_xml_ptree_ptr, private_xml_file_path); if (private_xml_ptree_ptr && private_xml_ptree_ptr->empty()) { private_xml_ptree_ptr.reset(); } // symbol_map { symbol_map_loader loader(*this, symbol_map_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); } loader_wrapper<symbol_map_loader>::traverse_system_xml(*this, loader, "symbol_map.xml"); global_included_files_.clear(); } // modifier { modifier_loader loader(*this, symbol_map_, remapclasses_initialize_vector_, identifier_map_, modifier_map_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); } loader_wrapper<modifier_loader>::traverse_system_xml(*this, loader, "modifierdef.xml"); global_included_files_.clear(); } // app { app_loader loader(*this, symbol_map_, app_vector_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); } loader_wrapper<app_loader>::traverse_system_xml(*this, loader, "appdef.xml"); global_included_files_.clear(); } // bundle_identifier_override { bundle_identifier_override_loader loader(*this, symbol_map_, bundle_identifier_override_vector_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); } loader_wrapper<bundle_identifier_override_loader>::traverse_system_xml(*this, loader, "bundleidentifieroverridedef.xml"); global_included_files_.clear(); } // window_name { window_name_loader loader(*this, symbol_map_, window_name_vector_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); } loader_wrapper<window_name_loader>::traverse_system_xml(*this, loader, "windownamedef.xml"); global_included_files_.clear(); } // ui_element_role { ui_element_role_loader loader(*this, symbol_map_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); } loader_wrapper<ui_element_role_loader>::traverse_system_xml(*this, loader, "uielementroledef.xml"); global_included_files_.clear(); } // device { device_loader loader(*this, symbol_map_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); } loader_wrapper<device_loader>::traverse_system_xml(*this, loader, "devicevendordef.xml"); loader_wrapper<device_loader>::traverse_system_xml(*this, loader, "deviceproductdef.xml"); loader_wrapper<device_loader>::traverse_system_xml(*this, loader, "devicelocationdef.xml"); global_included_files_.clear(); } // inputsource { inputsource_loader loader(*this, symbol_map_, remapclasses_initialize_vector_, identifier_map_, vk_change_inputsource_map_, inputsource_vector_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); } loader_wrapper<inputsource_loader>::traverse_system_xml(*this, loader, "vkchangeinputsourcedef.xml"); loader_wrapper<inputsource_loader>::traverse_system_xml(*this, loader, "inputsourcedef.xml"); global_included_files_.clear(); } // url { url_loader loader(*this, symbol_map_, remapclasses_initialize_vector_, identifier_map_, vk_open_url_map_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path)); } loader_wrapper<url_loader>::traverse_system_xml(*this, loader, "vkopenurldef.xml"); global_included_files_.clear(); } // config_index, remapclasses_initialize_vector, preferences_node { std::string checkbox_xml_file_path = make_file_path(system_xml_directory_, checkbox_xml_file_name); ptree_ptr checkbox_xml_ptree_ptr; read_xml_(checkbox_xml_ptree_ptr, checkbox_xml_file_path); std::string number_xml_file_path = make_file_path(system_xml_directory_, "number.xml"); ptree_ptr number_xml_ptree_ptr; read_xml_(number_xml_ptree_ptr, number_xml_file_path); // remapclasses_initialize_vector { // prepare { remapclasses_initialize_vector_prepare_loader<preferences_node_tree<preferences_number_node>> loader(*this, symbol_map_, essential_configurations_, &preferences_number_node_tree_); if (number_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*number_xml_ptree_ptr, number_xml_file_path), ""); loader.fixup(); } loader.cleanup(); global_included_files_.clear(); } { remapclasses_initialize_vector_prepare_loader<preferences_node_tree<preferences_checkbox_node>> loader(*this, symbol_map_, essential_configurations_, &preferences_checkbox_node_tree_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path), ""); loader.fixup(); } if (checkbox_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*checkbox_xml_ptree_ptr, checkbox_xml_file_path), ""); loader.fixup(); } loader.cleanup(); global_included_files_.clear(); } // ---------------------------------------- { remapclasses_initialize_vector_loader loader(*this, symbol_map_, remapclasses_initialize_vector_, identifier_map_); if (private_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path), ""); } if (checkbox_xml_ptree_ptr) { loader.traverse(make_extracted_ptree(*checkbox_xml_ptree_ptr, checkbox_xml_file_path), ""); } global_included_files_.clear(); } remapclasses_initialize_vector_.freeze(); } } if (!replacement_warnings_.empty()) { error_information_.set(replacement_warnings_); } } catch (std::exception& e) { error_information_.set(e.what()); } }