diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2f0d6f79..63010b60 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -189,15 +189,6 @@ set (LOOT_SRC "${CMAKE_BINARY_DIR}/generated/loot_version.cpp"
set (LOOT_HEADERS "${CMAKE_SOURCE_DIR}/src/backend/metadata/condition_evaluator.h"
"${CMAKE_SOURCE_DIR}/src/backend/metadata/condition_grammar.h"
- "${CMAKE_SOURCE_DIR}/src/backend/metadata/conditional_metadata.h"
- "${CMAKE_SOURCE_DIR}/src/backend/metadata/file.h"
- "${CMAKE_SOURCE_DIR}/src/backend/metadata/location.h"
- "${CMAKE_SOURCE_DIR}/src/backend/metadata/message.h"
- "${CMAKE_SOURCE_DIR}/src/backend/metadata/message_content.h"
- "${CMAKE_SOURCE_DIR}/src/backend/metadata/plugin_cleaning_data.h"
- "${CMAKE_SOURCE_DIR}/src/backend/metadata/plugin_metadata.h"
- "${CMAKE_SOURCE_DIR}/src/backend/metadata/priority.h"
- "${CMAKE_SOURCE_DIR}/src/backend/metadata/tag.h"
"${CMAKE_SOURCE_DIR}/src/backend/game/game.h"
"${CMAKE_SOURCE_DIR}/src/backend/game/game_cache.h"
"${CMAKE_SOURCE_DIR}/src/backend/game/game_settings.h"
@@ -208,10 +199,7 @@ set (LOOT_HEADERS "${CMAKE_SOURCE_DIR}/src/backend/metadata/condition_evaluator.
"${CMAKE_SOURCE_DIR}/src/backend/plugin/plugin_sorter.h"
"${CMAKE_SOURCE_DIR}/src/backend/helpers/git_helper.h"
"${CMAKE_SOURCE_DIR}/src/backend/helpers/helpers.h"
- "${CMAKE_SOURCE_DIR}/src/gui/query/json.h"
- "${CMAKE_SOURCE_DIR}/src/backend/helpers/language.h"
"${CMAKE_SOURCE_DIR}/src/backend/helpers/version.h"
- "${CMAKE_SOURCE_DIR}/src/backend/helpers/yaml_set_helpers.h"
"${CMAKE_SOURCE_DIR}/include/loot/api_decorator.h"
"${CMAKE_SOURCE_DIR}/include/loot/exception/error_categories.h"
"${CMAKE_SOURCE_DIR}/include/loot/exception/condition_syntax_error.h"
@@ -221,8 +209,26 @@ set (LOOT_HEADERS "${CMAKE_SOURCE_DIR}/src/backend/metadata/condition_evaluator.
"${CMAKE_SOURCE_DIR}/include/loot/exception/git_state_error.h"
"${CMAKE_SOURCE_DIR}/include/loot/enum/game_type.h"
"${CMAKE_SOURCE_DIR}/include/loot/enum/language_code.h"
- "${CMAKE_SOURCE_DIR}/include/loot/loot_version.h"
- "${CMAKE_SOURCE_DIR}/include/loot/enum/message_type.h")
+ "${CMAKE_SOURCE_DIR}/include/loot/enum/message_type.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/metadata/conditional_metadata.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/metadata/file.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/metadata/location.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/metadata/message.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/metadata/message_content.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/metadata/plugin_cleaning_data.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/metadata/plugin_metadata.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/metadata/priority.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/metadata/tag.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/yaml/file.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/yaml/location.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/yaml/message.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/yaml/message_content.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/yaml/plugin_cleaning_data.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/yaml/plugin_metadata.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/yaml/set.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/yaml/tag.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/language.h"
+ "${CMAKE_SOURCE_DIR}/include/loot/loot_version.h")
set (LOOT_GUI_SRC "${CMAKE_SOURCE_DIR}/src/gui/main.cpp"
"${CMAKE_SOURCE_DIR}/src/gui/helpers.cpp"
@@ -240,6 +246,7 @@ set (LOOT_GUI_HEADERS "${CMAKE_SOURCE_DIR}/src/gui/editor_message.h"
"${CMAKE_SOURCE_DIR}/src/gui/loot_handler.h"
"${CMAKE_SOURCE_DIR}/src/gui/loot_app.h"
"${CMAKE_SOURCE_DIR}/src/gui/loot_scheme_handler_factory.h"
+ "${CMAKE_SOURCE_DIR}/src/gui/query/json.h"
"${CMAKE_SOURCE_DIR}/src/gui/query/query.h"
"${CMAKE_SOURCE_DIR}/src/gui/query/apply_sort_query.h"
"${CMAKE_SOURCE_DIR}/src/gui/query/cancel_find_query.h"
diff --git a/src/backend/helpers/language.h b/include/loot/language.h
similarity index 91%
rename from src/backend/helpers/language.h
rename to include/loot/language.h
index 3e422f05..918f8b94 100644
--- a/src/backend/helpers/language.h
+++ b/include/loot/language.h
@@ -22,8 +22,8 @@
.
*/
-#ifndef LOOT_BACKEND_HELPERS_LANGUAGE
-#define LOOT_BACKEND_HELPERS_LANGUAGE
+#ifndef LOOT_LANGUAGE
+#define LOOT_LANGUAGE
#include
#include
@@ -31,7 +31,6 @@
#include "loot/enum/language_code.h"
namespace loot {
- //Language class for simpler language support.
class Language {
public:
diff --git a/src/backend/metadata/conditional_metadata.h b/include/loot/metadata/conditional_metadata.h
similarity index 92%
rename from src/backend/metadata/conditional_metadata.h
rename to include/loot/metadata/conditional_metadata.h
index e6745cf2..af758709 100644
--- a/src/backend/metadata/conditional_metadata.h
+++ b/include/loot/metadata/conditional_metadata.h
@@ -21,8 +21,8 @@
along with LOOT. If not, see
.
*/
-#ifndef LOOT_BACKEND_METADATA_CONDITIONAL_METADATA
-#define LOOT_BACKEND_METADATA_CONDITIONAL_METADATA
+#ifndef LOOT_METADATA_CONDITIONAL_METADATA
+#define LOOT_METADATA_CONDITIONAL_METADATA
#include
diff --git a/include/loot/metadata/file.h b/include/loot/metadata/file.h
new file mode 100644
index 00000000..c6082f9e
--- /dev/null
+++ b/include/loot/metadata/file.h
@@ -0,0 +1,49 @@
+/* LOOT
+
+ A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and
+ Fallout: New Vegas.
+
+ Copyright (C) 2012-2016 WrinklyNinja
+
+ This file is part of LOOT.
+
+ LOOT is free software: you can redistribute
+ it and/or modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ LOOT is distributed in the hope that it will
+ be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LOOT. If not, see
+ .
+ */
+#ifndef LOOT_METADATA_FILE
+#define LOOT_METADATA_FILE
+
+#include
+
+#include "loot/metadata/conditional_metadata.h"
+
+namespace loot {
+class File : public ConditionalMetadata {
+public:
+ File();
+ File(const std::string& name, const std::string& display = "",
+ const std::string& condition = "");
+
+ bool operator < (const File& rhs) const;
+ bool operator == (const File& rhs) const;
+
+ std::string Name() const;
+ std::string DisplayName() const;
+private:
+ std::string name_;
+ std::string display_;
+};
+}
+
+#endif
diff --git a/include/loot/metadata/location.h b/include/loot/metadata/location.h
new file mode 100644
index 00000000..39af217f
--- /dev/null
+++ b/include/loot/metadata/location.h
@@ -0,0 +1,47 @@
+/* LOOT
+
+ A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and
+ Fallout: New Vegas.
+
+ Copyright (C) 2012-2016 WrinklyNinja
+
+ This file is part of LOOT.
+
+ LOOT is free software: you can redistribute
+ it and/or modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ LOOT is distributed in the hope that it will
+ be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LOOT. If not, see
+ .
+ */
+#ifndef LOOT_METADATA_LOCATION
+#define LOOT_METADATA_LOCATION
+
+#include
+#include
+
+namespace loot {
+class Location {
+public:
+ Location();
+ Location(const std::string& url, const std::string& name = "");
+
+ bool operator < (const Location& rhs) const;
+ bool operator == (const Location& rhs) const;
+
+ std::string URL() const;
+ std::string Name() const;
+private:
+ std::string url_;
+ std::string name_;
+};
+}
+
+#endif
diff --git a/include/loot/metadata/message.h b/include/loot/metadata/message.h
new file mode 100644
index 00000000..a72b1774
--- /dev/null
+++ b/include/loot/metadata/message.h
@@ -0,0 +1,59 @@
+/* LOOT
+
+ A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and
+ Fallout: New Vegas.
+
+ Copyright (C) 2012-2016 WrinklyNinja
+
+ This file is part of LOOT.
+
+ LOOT is free software: you can redistribute
+ it and/or modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ LOOT is distributed in the hope that it will
+ be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LOOT. If not, see
+ .
+ */
+#ifndef LOOT_METADATA_MESSAGE
+#define LOOT_METADATA_MESSAGE
+
+#include
+#include
+
+#include "loot/metadata/conditional_metadata.h"
+#include "loot/metadata/message_content.h"
+#include "loot/enum/language_code.h"
+#include "loot/enum/message_type.h"
+#include "loot/struct/simple_message.h"
+
+namespace loot {
+class Message : public ConditionalMetadata {
+public:
+ Message();
+ Message(const MessageType type, const std::string& content,
+ const std::string& condition = "");
+ Message(const MessageType type, const std::vector& content,
+ const std::string& condition = "");
+
+ bool operator < (const Message& rhs) const;
+ bool operator == (const Message& rhs) const;
+
+ MessageType GetType() const;
+ std::vector GetContent() const;
+ MessageContent GetContent(const LanguageCode language) const;
+
+ SimpleMessage ToSimpleMessage(const LanguageCode language) const;
+private:
+ MessageType type_;
+ std::vector content_;
+};
+}
+
+#endif
diff --git a/include/loot/metadata/message_content.h b/include/loot/metadata/message_content.h
new file mode 100644
index 00000000..276ed07c
--- /dev/null
+++ b/include/loot/metadata/message_content.h
@@ -0,0 +1,51 @@
+/* LOOT
+
+ A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and
+ Fallout: New Vegas.
+
+ Copyright (C) 2012-2016 WrinklyNinja
+
+ This file is part of LOOT.
+
+ LOOT is free software: you can redistribute
+ it and/or modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ LOOT is distributed in the hope that it will
+ be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LOOT. If not, see
+ .
+ */
+#ifndef LOOT_METADATA_MESSAGE_CONTENT
+#define LOOT_METADATA_MESSAGE_CONTENT
+
+#include
+
+#include "loot/language.h"
+
+namespace loot {
+class MessageContent {
+public:
+ MessageContent();
+ MessageContent(const std::string& text, const LanguageCode language);
+
+ std::string GetText() const;
+ LanguageCode GetLanguage() const;
+
+ bool operator < (const MessageContent& rhs) const;
+ bool operator == (const MessageContent& rhs) const;
+
+ static MessageContent Choose(const std::vector content,
+ const LanguageCode language);
+private:
+ std::string text_;
+ LanguageCode language_;
+};
+}
+
+#endif
diff --git a/include/loot/metadata/plugin_cleaning_data.h b/include/loot/metadata/plugin_cleaning_data.h
new file mode 100644
index 00000000..330b45eb
--- /dev/null
+++ b/include/loot/metadata/plugin_cleaning_data.h
@@ -0,0 +1,71 @@
+/* LOOT
+
+ A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and
+ Fallout: New Vegas.
+
+ Copyright (C) 2012-2016 WrinklyNinja
+
+ This file is part of LOOT.
+
+ LOOT is free software: you can redistribute
+ it and/or modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ LOOT is distributed in the hope that it will
+ be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LOOT. If not, see
+ .
+ */
+
+#ifndef LOOT_METADATA_PLUGIN_CLEANING_DATA
+#define LOOT_METADATA_PLUGIN_CLEANING_DATA
+
+#include
+#include
+
+#include "loot/metadata/message.h"
+
+namespace loot {
+class Game;
+
+class PluginCleaningData {
+public:
+ PluginCleaningData();
+ PluginCleaningData(uint32_t crc, const std::string& utility);
+ PluginCleaningData(uint32_t crc,
+ const std::string& utility,
+ const std::vector& info,
+ unsigned int itm,
+ unsigned int ref,
+ unsigned int nav);
+
+ bool operator < (const PluginCleaningData& rhs) const;
+ bool operator == (const PluginCleaningData& rhs) const;
+
+ uint32_t CRC() const;
+ unsigned int ITMs() const;
+ unsigned int DeletedRefs() const;
+ unsigned int DeletedNavmeshes() const;
+ std::string CleaningUtility() const;
+ std::vector Info() const;
+
+ MessageContent ChooseInfo(const LanguageCode language) const;
+ Message AsMessage() const;
+
+ bool EvalCondition(Game& game, const std::string& pluginName) const;
+private:
+ uint32_t crc_;
+ unsigned int itm_;
+ unsigned int ref_;
+ unsigned int nav_;
+ std::string utility_;
+ std::vector info_;
+};
+}
+
+#endif
diff --git a/include/loot/metadata/plugin_metadata.h b/include/loot/metadata/plugin_metadata.h
new file mode 100644
index 00000000..959975bb
--- /dev/null
+++ b/include/loot/metadata/plugin_metadata.h
@@ -0,0 +1,129 @@
+/* LOOT
+
+ A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and
+ Fallout: New Vegas.
+
+ Copyright (C) 2012-2016 WrinklyNinja
+
+ This file is part of LOOT.
+
+ LOOT is free software: you can redistribute
+ it and/or modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ LOOT is distributed in the hope that it will
+ be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LOOT. If not, see
+ .
+ */
+#ifndef LOOT_METADATA_PLUGIN_METADATA
+#define LOOT_METADATA_PLUGIN_METADATA
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "loot/yaml/set.h"
+#include "loot/metadata/file.h"
+#include "loot/metadata/location.h"
+#include "loot/metadata/message.h"
+#include "loot/metadata/plugin_cleaning_data.h"
+#include "loot/metadata/priority.h"
+#include "loot/metadata/tag.h"
+
+namespace loot {
+class Game;
+
+class PluginMetadata {
+public:
+ PluginMetadata();
+ PluginMetadata(const std::string& name);
+
+ //Merges from the given plugin into this one, unless there is already equal metadata present.
+ //For 'enabled' and 'priority' metadata, use the given plugin's values, but if the 'priority' user value is zero, ignore it.
+ void MergeMetadata(const PluginMetadata& plugin);
+
+ //Returns the difference in metadata between the two plugins.
+ //For 'enabled', use this plugin's value.
+ //For 'priority', use 0 if the two plugin priorities are equal, and make it not explicit. Otherwise use this plugin's value.
+ PluginMetadata DiffMetadata(const PluginMetadata& plugin) const;
+
+ // Returns metadata in this plugin not in the given plugin.
+ //For 'enabled', use this plugin's value.
+ //For 'priority', use 0 if the two plugin priorities are equal, and make it not explicit. Otherwise use this plugin's value.
+ PluginMetadata NewMetadata(const PluginMetadata& plugin) const;
+
+ std::string Name() const;
+ std::string LowercasedName() const;
+ bool Enabled() const;
+ Priority LocalPriority() const;
+ Priority GlobalPriority() const;
+ std::set LoadAfter() const;
+ std::set Reqs() const;
+ std::set Incs() const;
+ std::vector Messages() const;
+ std::set Tags() const;
+ std::set DirtyInfo() const;
+ std::set CleanInfo() const;
+ std::set Locations() const;
+
+ std::vector SimpleMessages(const LanguageCode language) const;
+
+ void Enabled(const bool enabled);
+ void LocalPriority(const Priority& priority);
+ void GlobalPriority(const Priority& priority);
+ void LoadAfter(const std::set& after);
+ void Reqs(const std::set& reqs);
+ void Incs(const std::set& incs);
+ void Messages(const std::vector& messages);
+ void Tags(const std::set& tags);
+ void DirtyInfo(const std::set& info);
+ void CleanInfo(const std::set& info);
+ void Locations(const std::set& locations);
+
+ PluginMetadata& EvalAllConditions(Game& game);
+ bool HasNameOnly() const;
+ bool IsRegexPlugin() const;
+
+ //Compare name strings.
+ bool operator == (const PluginMetadata& rhs) const;
+ bool operator != (const PluginMetadata& rhs) const;
+
+ //Compare name string.
+ bool operator == (const std::string& rhs) const;
+ bool operator != (const std::string& rhs) const;
+protected:
+ std::vector messages_;
+ std::set tags_;
+private:
+ std::string name_;
+ bool enabled_; //Default to true.
+ Priority localPriority_;
+ Priority globalPriority_;
+ std::set loadAfter_;
+ std::set requirements_;
+ std::set incompatibilities_;
+ std::set dirtyInfo_;
+ std::set cleanInfo_;
+ std::set locations_;
+};
+}
+
+namespace std {
+template<>
+struct hash {
+ size_t operator() (const loot::PluginMetadata& plugin) const {
+ return hash()(plugin.LowercasedName());
+ }
+};
+}
+
+#endif
diff --git a/src/backend/metadata/priority.h b/include/loot/metadata/priority.h
similarity index 95%
rename from src/backend/metadata/priority.h
rename to include/loot/metadata/priority.h
index 0b6f131f..eb6dc307 100644
--- a/src/backend/metadata/priority.h
+++ b/include/loot/metadata/priority.h
@@ -21,8 +21,8 @@
along with LOOT. If not, see
.
*/
-#ifndef LOOT_BACKEND_METADATA_PRIORITY
-#define LOOT_BACKEND_METADATA_PRIORITY
+#ifndef LOOT_METADATA_PRIORITY
+#define LOOT_METADATA_PRIORITY
#include
diff --git a/include/loot/metadata/tag.h b/include/loot/metadata/tag.h
new file mode 100644
index 00000000..f666ee71
--- /dev/null
+++ b/include/loot/metadata/tag.h
@@ -0,0 +1,50 @@
+/* LOOT
+
+ A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and
+ Fallout: New Vegas.
+
+ Copyright (C) 2012-2016 WrinklyNinja
+
+ This file is part of LOOT.
+
+ LOOT is free software: you can redistribute
+ it and/or modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ LOOT is distributed in the hope that it will
+ be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LOOT. If not, see
+ .
+ */
+#ifndef LOOT_METADATA_TAG
+#define LOOT_METADATA_TAG
+
+#include
+
+#include "loot/metadata/conditional_metadata.h"
+
+namespace loot {
+class Tag : public ConditionalMetadata {
+public:
+ Tag();
+ Tag(const std::string& tag,
+ const bool isAddition = true,
+ const std::string& condition = "");
+
+ bool operator < (const Tag& rhs) const;
+ bool operator == (const Tag& rhs) const;
+
+ bool IsAddition() const;
+ std::string Name() const;
+private:
+ std::string name_;
+ bool addTag_;
+};
+}
+
+#endif
diff --git a/src/backend/metadata/file.h b/include/loot/yaml/file.h
similarity index 77%
rename from src/backend/metadata/file.h
rename to include/loot/yaml/file.h
index 06dffea3..9fe7141b 100644
--- a/src/backend/metadata/file.h
+++ b/include/loot/yaml/file.h
@@ -21,32 +21,14 @@
along with LOOT. If not, see
.
*/
-#ifndef LOOT_BACKEND_METADATA_FILE
-#define LOOT_BACKEND_METADATA_FILE
+#ifndef LOOT_YAML_FILE
+#define LOOT_YAML_FILE
#include
#include
-#include "backend/metadata/conditional_metadata.h"
-
-namespace loot {
-class File : public ConditionalMetadata {
-public:
- File();
- File(const std::string& name, const std::string& display = "",
- const std::string& condition = "");
-
- bool operator < (const File& rhs) const;
- bool operator == (const File& rhs) const;
-
- std::string Name() const;
- std::string DisplayName() const;
-private:
- std::string name_;
- std::string display_;
-};
-}
+#include "loot/metadata/file.h"
namespace YAML {
template<>
@@ -93,7 +75,24 @@ struct convert {
}
};
-Emitter& operator << (Emitter& out, const loot::File& rhs);
+inline Emitter& operator << (Emitter& out, const loot::File& rhs) {
+ if (!rhs.IsConditional() && (rhs.DisplayName().empty() || rhs.DisplayName() == rhs.Name()))
+ out << YAML::SingleQuoted << rhs.Name();
+ else {
+ out << BeginMap
+ << Key << "name" << Value << YAML::SingleQuoted << rhs.Name();
+
+ if (rhs.IsConditional())
+ out << Key << "condition" << Value << YAML::SingleQuoted << rhs.Condition();
+
+ if (rhs.DisplayName() != rhs.Name())
+ out << Key << "display" << Value << YAML::SingleQuoted << rhs.DisplayName();
+
+ out << EndMap;
+ }
+
+ return out;
+}
}
#endif
diff --git a/src/backend/metadata/location.h b/include/loot/yaml/location.h
similarity index 79%
rename from src/backend/metadata/location.h
rename to include/loot/yaml/location.h
index ae543776..7dc04762 100644
--- a/src/backend/metadata/location.h
+++ b/include/loot/yaml/location.h
@@ -21,30 +21,15 @@
along with LOOT. If not, see
.
*/
-#ifndef LOOT_BACKEND_METADATA_LOCATION
-#define LOOT_BACKEND_METADATA_LOCATION
+#ifndef LOOT_YAML_LOCATION
+#define LOOT_YAML_LOCATION
#include
#include
#include
-namespace loot {
-class Location {
-public:
- Location();
- Location(const std::string& url, const std::string& name = "");
-
- bool operator < (const Location& rhs) const;
- bool operator == (const Location& rhs) const;
-
- std::string URL() const;
- std::string Name() const;
-private:
- std::string url_;
- std::string name_;
-};
-}
+#include "loot/metadata/location.h"
namespace YAML {
template<>
@@ -82,7 +67,17 @@ struct convert {
}
};
-Emitter& operator << (Emitter& out, const loot::Location& rhs);
+inline Emitter& operator << (Emitter& out, const loot::Location& rhs) {
+ if (rhs.Name().empty())
+ out << YAML::SingleQuoted << rhs.URL();
+ else {
+ out << BeginMap
+ << Key << "link" << Value << YAML::SingleQuoted << rhs.URL()
+ << Key << "name" << Value << YAML::SingleQuoted << rhs.Name()
+ << EndMap;
+ }
+ return out;
+}
}
#endif
diff --git a/src/backend/metadata/message.h b/include/loot/yaml/message.h
similarity index 78%
rename from src/backend/metadata/message.h
rename to include/loot/yaml/message.h
index 6e58efe8..cf2fdfd9 100644
--- a/src/backend/metadata/message.h
+++ b/include/loot/yaml/message.h
@@ -21,8 +21,8 @@
along with LOOT. If not, see
.
*/
-#ifndef LOOT_BACKEND_METADATA_MESSAGE
-#define LOOT_BACKEND_METADATA_MESSAGE
+#ifndef LOOT_YAML_MESSAGE
+#define LOOT_YAML_MESSAGE
#include
#include
@@ -31,34 +31,7 @@
#include
#include
-#include "backend/metadata/conditional_metadata.h"
-#include "backend/metadata/message_content.h"
-#include "loot/enum/language_code.h"
-#include "loot/enum/message_type.h"
-#include "loot/struct/simple_message.h"
-
-namespace loot {
-class Message : public ConditionalMetadata {
-public:
- Message();
- Message(const MessageType type, const std::string& content,
- const std::string& condition = "");
- Message(const MessageType type, const std::vector& content,
- const std::string& condition = "");
-
- bool operator < (const Message& rhs) const;
- bool operator == (const Message& rhs) const;
-
- MessageType GetType() const;
- std::vector GetContent() const;
- MessageContent GetContent(const LanguageCode language) const;
-
- SimpleMessage ToSimpleMessage(const LanguageCode language) const;
-private:
- MessageType type_;
- std::vector content_;
-};
-}
+#include "loot/metadata/message.h"
namespace YAML {
template<>
@@ -150,7 +123,28 @@ struct convert {
}
};
-Emitter& operator << (Emitter& out, const loot::Message& rhs);
+inline Emitter& operator << (Emitter& out, const loot::Message& rhs) {
+ out << BeginMap;
+
+ if (rhs.GetType() == loot::MessageType::say)
+ out << Key << "type" << Value << "say";
+ else if (rhs.GetType() == loot::MessageType::warn)
+ out << Key << "type" << Value << "warn";
+ else
+ out << Key << "type" << Value << "error";
+
+ if (rhs.GetContent().size() == 1)
+ out << Key << "content" << Value << YAML::SingleQuoted << rhs.GetContent().front().GetText();
+ else
+ out << Key << "content" << Value << rhs.GetContent();
+
+ if (rhs.IsConditional())
+ out << Key << "condition" << Value << YAML::SingleQuoted << rhs.Condition();
+
+ out << EndMap;
+
+ return out;
+}
}
#endif
diff --git a/src/backend/metadata/message_content.h b/include/loot/yaml/message_content.h
similarity index 75%
rename from src/backend/metadata/message_content.h
rename to include/loot/yaml/message_content.h
index d80d57a2..3f49ca43 100644
--- a/src/backend/metadata/message_content.h
+++ b/include/loot/yaml/message_content.h
@@ -28,27 +28,7 @@
#include
-#include "backend/helpers/language.h"
-
-namespace loot {
-class MessageContent {
-public:
- MessageContent();
- MessageContent(const std::string& text, const LanguageCode language);
-
- std::string GetText() const;
- LanguageCode GetLanguage() const;
-
- bool operator < (const MessageContent& rhs) const;
- bool operator == (const MessageContent& rhs) const;
-
- static MessageContent Choose(const std::vector content,
- const LanguageCode language);
-private:
- std::string text_;
- LanguageCode language_;
-};
-}
+#include "loot/metadata/message_content.h"
namespace YAML {
template<>
@@ -78,7 +58,17 @@ struct convert {
}
};
-Emitter& operator << (Emitter& out, const loot::MessageContent& rhs);
+inline Emitter& operator << (Emitter& out, const loot::MessageContent& rhs) {
+ out << BeginMap;
+
+ out << Key << "lang" << Value << loot::Language(rhs.GetLanguage()).GetLocale();
+
+ out << Key << "text" << Value << YAML::SingleQuoted << rhs.GetText();
+
+ out << EndMap;
+
+ return out;
+}
}
#endif
diff --git a/src/backend/metadata/plugin_cleaning_data.h b/include/loot/yaml/plugin_cleaning_data.h
similarity index 70%
rename from src/backend/metadata/plugin_cleaning_data.h
rename to include/loot/yaml/plugin_cleaning_data.h
index 4e2a1ae5..03f7d6c4 100644
--- a/src/backend/metadata/plugin_cleaning_data.h
+++ b/include/loot/yaml/plugin_cleaning_data.h
@@ -22,53 +22,15 @@
.
*/
-#ifndef LOOT_BACKEND_METADATA_PLUGIN_CLEANING_DATA
-#define LOOT_BACKEND_METADATA_PLUGIN_CLEANING_DATA
+#ifndef LOOT_YAML_PLUGIN_CLEANING_DATA
+#define LOOT_YAML_PLUGIN_CLEANING_DATA
#include
#include
#include
-#include "backend/metadata/message.h"
-
-namespace loot {
-class Game;
-
-class PluginCleaningData {
-public:
- PluginCleaningData();
- PluginCleaningData(uint32_t crc, const std::string& utility);
- PluginCleaningData(uint32_t crc,
- const std::string& utility,
- const std::vector& info,
- unsigned int itm,
- unsigned int ref,
- unsigned int nav);
-
- bool operator < (const PluginCleaningData& rhs) const;
- bool operator == (const PluginCleaningData& rhs) const;
-
- uint32_t CRC() const;
- unsigned int ITMs() const;
- unsigned int DeletedRefs() const;
- unsigned int DeletedNavmeshes() const;
- std::string CleaningUtility() const;
- std::vector Info() const;
-
- MessageContent ChooseInfo(const LanguageCode language) const;
- Message AsMessage() const;
-
- bool EvalCondition(Game& game, const std::string& pluginName) const;
-private:
- uint32_t crc_;
- unsigned int itm_;
- unsigned int ref_;
- unsigned int nav_;
- std::string utility_;
- std::vector info_;
-};
-}
+#include "loot/metadata/plugin_cleaning_data.h"
namespace YAML {
template<>
@@ -135,7 +97,29 @@ struct convert {
}
};
-Emitter& operator << (Emitter& out, const loot::PluginCleaningData& rhs);
+inline Emitter& operator << (Emitter& out, const loot::PluginCleaningData& rhs) {
+ out << BeginMap
+ << Key << "crc" << Value << Hex << rhs.CRC() << Dec
+ << Key << "util" << Value << YAML::SingleQuoted << rhs.CleaningUtility();
+
+ if (!rhs.Info().empty()) {
+ if (rhs.Info().size() == 1)
+ out << Key << "info" << Value << YAML::SingleQuoted << rhs.Info().front().GetText();
+ else
+ out << Key << "info" << Value << rhs.Info();
+ }
+
+ if (rhs.ITMs() > 0)
+ out << Key << "itm" << Value << rhs.ITMs();
+ if (rhs.DeletedRefs() > 0)
+ out << Key << "udr" << Value << rhs.DeletedRefs();
+ if (rhs.DeletedNavmeshes() > 0)
+ out << Key << "nav" << Value << rhs.DeletedNavmeshes();
+
+ out << EndMap;
+
+ return out;
+}
}
#endif
diff --git a/src/backend/metadata/plugin_metadata.h b/include/loot/yaml/plugin_metadata.h
similarity index 55%
rename from src/backend/metadata/plugin_metadata.h
rename to include/loot/yaml/plugin_metadata.h
index cd674ae4..2cb96dc6 100644
--- a/src/backend/metadata/plugin_metadata.h
+++ b/include/loot/yaml/plugin_metadata.h
@@ -31,102 +31,17 @@
#include
#include
-#include
#include
-#include "backend/helpers/yaml_set_helpers.h"
-#include "backend/metadata/file.h"
-#include "backend/metadata/location.h"
-#include "backend/metadata/message.h"
-#include "backend/metadata/plugin_cleaning_data.h"
-#include "backend/metadata/priority.h"
-#include "backend/metadata/tag.h"
+#include "loot/metadata/plugin_metadata.h"
-namespace loot {
-class Game;
-
-class PluginMetadata {
-public:
- PluginMetadata();
- PluginMetadata(const std::string& name);
-
- //Merges from the given plugin into this one, unless there is already equal metadata present.
- //For 'enabled' and 'priority' metadata, use the given plugin's values, but if the 'priority' user value is zero, ignore it.
- void MergeMetadata(const PluginMetadata& plugin);
-
- //Returns the difference in metadata between the two plugins.
- //For 'enabled', use this plugin's value.
- //For 'priority', use 0 if the two plugin priorities are equal, and make it not explicit. Otherwise use this plugin's value.
- PluginMetadata DiffMetadata(const PluginMetadata& plugin) const;
-
- // Returns metadata in this plugin not in the given plugin.
- //For 'enabled', use this plugin's value.
- //For 'priority', use 0 if the two plugin priorities are equal, and make it not explicit. Otherwise use this plugin's value.
- PluginMetadata NewMetadata(const PluginMetadata& plugin) const;
-
- std::string Name() const;
- bool Enabled() const;
- Priority LocalPriority() const;
- Priority GlobalPriority() const;
- std::set LoadAfter() const;
- std::set Reqs() const;
- std::set Incs() const;
- std::vector Messages() const;
- std::set Tags() const;
- std::set DirtyInfo() const;
- std::set CleanInfo() const;
- std::set Locations() const;
-
- std::vector SimpleMessages(const LanguageCode language) const;
-
- void Enabled(const bool enabled);
- void LocalPriority(const Priority& priority);
- void GlobalPriority(const Priority& priority);
- void LoadAfter(const std::set& after);
- void Reqs(const std::set& reqs);
- void Incs(const std::set& incs);
- void Messages(const std::vector& messages);
- void Tags(const std::set& tags);
- void DirtyInfo(const std::set& info);
- void CleanInfo(const std::set& info);
- void Locations(const std::set& locations);
-
- PluginMetadata& EvalAllConditions(Game& game);
- bool HasNameOnly() const;
- bool IsRegexPlugin() const;
-
- //Compare name strings.
- bool operator == (const PluginMetadata& rhs) const;
- bool operator != (const PluginMetadata& rhs) const;
-
- //Compare name string.
- bool operator == (const std::string& rhs) const;
- bool operator != (const std::string& rhs) const;
-protected:
- std::vector messages_;
- std::set tags_;
-private:
- std::string name_;
- bool enabled_; //Default to true.
- Priority localPriority_;
- Priority globalPriority_;
- std::set loadAfter_;
- std::set requirements_;
- std::set incompatibilities_;
- std::set dirtyInfo_;
- std::set cleanInfo_;
- std::set locations_;
-};
-}
-
-namespace std {
-template<>
-struct hash {
- size_t operator() (const loot::PluginMetadata& plugin) const {
- return hash()(boost::locale::to_lower(plugin.Name()));
- }
-};
-}
+#include "loot/yaml/file.h"
+#include "loot/yaml/location.h"
+#include "loot/yaml/message_content.h"
+#include "loot/yaml/message.h"
+#include "loot/yaml/plugin_cleaning_data.h"
+#include "loot/yaml/set.h"
+#include "loot/yaml/tag.h"
namespace YAML {
template<>
@@ -223,7 +138,51 @@ struct convert {
}
};
-Emitter& operator << (Emitter& out, const loot::PluginMetadata& rhs);
+inline Emitter& operator << (Emitter& out, const loot::PluginMetadata& rhs) {
+ if (!rhs.HasNameOnly()) {
+ out << BeginMap
+ << Key << "name" << Value << YAML::SingleQuoted << rhs.Name();
+
+ if (!rhs.Enabled())
+ out << Key << "enabled" << Value << rhs.Enabled();
+
+ if (rhs.LocalPriority().isExplicit()) {
+ out << Key << "priority" << Value << rhs.LocalPriority().getValue();
+ }
+
+ if (rhs.GlobalPriority().isExplicit()) {
+ out << Key << "global_priority" << Value << rhs.GlobalPriority().getValue();
+ }
+
+ if (!rhs.LoadAfter().empty())
+ out << Key << "after" << Value << rhs.LoadAfter();
+
+ if (!rhs.Reqs().empty())
+ out << Key << "req" << Value << rhs.Reqs();
+
+ if (!rhs.Incs().empty())
+ out << Key << "inc" << Value << rhs.Incs();
+
+ if (!rhs.Messages().empty())
+ out << Key << "msg" << Value << rhs.Messages();
+
+ if (!rhs.Tags().empty())
+ out << Key << "tag" << Value << rhs.Tags();
+
+ if (!rhs.DirtyInfo().empty())
+ out << Key << "dirty" << Value << rhs.DirtyInfo();
+
+ if (!rhs.CleanInfo().empty())
+ out << Key << "clean" << Value << rhs.CleanInfo();
+
+ if (!rhs.Locations().empty())
+ out << Key << "url" << Value << rhs.Locations();
+
+ out << EndMap;
+ }
+
+ return out;
+}
}
#endif
diff --git a/src/backend/helpers/yaml_set_helpers.h b/include/loot/yaml/set.h
similarity index 100%
rename from src/backend/helpers/yaml_set_helpers.h
rename to include/loot/yaml/set.h
diff --git a/src/backend/metadata/tag.h b/include/loot/yaml/tag.h
similarity index 81%
rename from src/backend/metadata/tag.h
rename to include/loot/yaml/tag.h
index 0a5aa7af..c2c47d93 100644
--- a/src/backend/metadata/tag.h
+++ b/include/loot/yaml/tag.h
@@ -28,24 +28,7 @@
#include
-#include "backend/metadata/conditional_metadata.h"
-
-namespace loot {
-class Tag : public ConditionalMetadata {
-public:
- Tag();
- Tag(const std::string& tag, const bool isAddition = true, const std::string& condition = "");
-
- bool operator < (const Tag& rhs) const;
- bool operator == (const Tag& rhs) const;
-
- bool IsAddition() const;
- std::string Name() const;
-private:
- std::string name_;
- bool addTag_;
-};
-}
+#include "loot/metadata/tag.h"
namespace YAML {
template<>
@@ -92,7 +75,25 @@ struct convert {
}
};
-Emitter& operator << (Emitter& out, const loot::Tag& rhs);
+inline Emitter& operator << (Emitter& out, const loot::Tag& rhs) {
+ if (!rhs.IsConditional()) {
+ if (rhs.IsAddition())
+ out << rhs.Name();
+ else
+ out << ('-' + rhs.Name());
+ } else {
+ out << BeginMap;
+ if (rhs.IsAddition())
+ out << Key << "name" << Value << rhs.Name();
+ else
+ out << Key << "name" << Value << ('-' + rhs.Name());
+
+ out << Key << "condition" << Value << YAML::SingleQuoted << rhs.Condition()
+ << EndMap;
+ }
+
+ return out;
+}
}
#endif
diff --git a/src/api/api_database.cpp b/src/api/api_database.cpp
index 5703225f..4a979b70 100644
--- a/src/api/api_database.cpp
+++ b/src/api/api_database.cpp
@@ -27,7 +27,10 @@
#include
#include
+#include
+
#include "loot/exception/file_access_error.h"
+#include "loot/yaml/plugin_metadata.h"
#include "backend/game/game.h"
#include "backend/plugin/plugin_sorter.h"
diff --git a/src/backend/game/game.cpp b/src/backend/game/game.cpp
index f531a95e..735a819d 100644
--- a/src/backend/game/game.cpp
+++ b/src/backend/game/game.cpp
@@ -29,6 +29,7 @@
#include
#include
+#include
#include
#include
diff --git a/src/backend/helpers/language.cpp b/src/backend/helpers/language.cpp
index 770c135f..3d7ffa41 100644
--- a/src/backend/helpers/language.cpp
+++ b/src/backend/helpers/language.cpp
@@ -22,7 +22,7 @@
.
*/
-#include "backend/helpers/language.h"
+#include "loot/language.h"
namespace loot {
const std::vector Language::codes({
diff --git a/src/backend/masterlist.cpp b/src/backend/masterlist.cpp
index 8188d751..abfbc408 100644
--- a/src/backend/masterlist.cpp
+++ b/src/backend/masterlist.cpp
@@ -24,6 +24,7 @@
#include "backend/masterlist.h"
+#include
#include
#include "loot/exception/file_access_error.h"
diff --git a/src/backend/metadata/condition_evaluator.cpp b/src/backend/metadata/condition_evaluator.cpp
index b7608295..236b36c9 100644
--- a/src/backend/metadata/condition_evaluator.cpp
+++ b/src/backend/metadata/condition_evaluator.cpp
@@ -24,6 +24,8 @@
#include "backend/metadata/condition_evaluator.h"
+#include
+#include
#include
#include "backend/helpers/helpers.h"
diff --git a/src/backend/metadata/conditional_metadata.cpp b/src/backend/metadata/conditional_metadata.cpp
index 4876d39d..d801933c 100644
--- a/src/backend/metadata/conditional_metadata.cpp
+++ b/src/backend/metadata/conditional_metadata.cpp
@@ -22,7 +22,7 @@
.
*/
-#include "backend/metadata/conditional_metadata.h"
+#include "loot/metadata/conditional_metadata.h"
#include
#include
diff --git a/src/backend/metadata/file.cpp b/src/backend/metadata/file.cpp
index b21c5672..0eb385b1 100644
--- a/src/backend/metadata/file.cpp
+++ b/src/backend/metadata/file.cpp
@@ -22,10 +22,12 @@
.
*/
-#include "backend/metadata/file.h"
+#include "loot/metadata/file.h"
#include
+#include "loot/yaml/file.h"
+
namespace loot {
File::File() {}
@@ -51,24 +53,3 @@ std::string File::DisplayName() const {
return display_;
}
}
-
-namespace YAML {
-Emitter& operator << (Emitter& out, const loot::File& rhs) {
- if (!rhs.IsConditional() && (rhs.DisplayName().empty() || rhs.DisplayName() == rhs.Name()))
- out << YAML::SingleQuoted << rhs.Name();
- else {
- out << BeginMap
- << Key << "name" << Value << YAML::SingleQuoted << rhs.Name();
-
- if (rhs.IsConditional())
- out << Key << "condition" << Value << YAML::SingleQuoted << rhs.Condition();
-
- if (rhs.DisplayName() != rhs.Name())
- out << Key << "display" << Value << YAML::SingleQuoted << rhs.DisplayName();
-
- out << EndMap;
- }
-
- return out;
-}
-}
diff --git a/src/backend/metadata/location.cpp b/src/backend/metadata/location.cpp
index 12be5213..5751ca19 100644
--- a/src/backend/metadata/location.cpp
+++ b/src/backend/metadata/location.cpp
@@ -22,7 +22,7 @@
.
*/
-#include "location.h"
+#include "loot/metadata/location.h"
#include
@@ -47,17 +47,3 @@ std::string Location::Name() const {
return name_;
}
}
-
-namespace YAML {
-Emitter& operator << (Emitter& out, const loot::Location& rhs) {
- if (rhs.Name().empty())
- out << YAML::SingleQuoted << rhs.URL();
- else {
- out << BeginMap
- << Key << "link" << Value << YAML::SingleQuoted << rhs.URL()
- << Key << "name" << Value << YAML::SingleQuoted << rhs.Name()
- << EndMap;
- }
- return out;
-}
-}
diff --git a/src/backend/metadata/message.cpp b/src/backend/metadata/message.cpp
index 0b6146ef..e823c7cb 100644
--- a/src/backend/metadata/message.cpp
+++ b/src/backend/metadata/message.cpp
@@ -22,12 +22,13 @@
.
*/
-#include "backend/metadata/message.h"
+#include "loot/metadata/message.h"
+#include
#include
#include "backend/game/game.h"
-#include "backend/helpers/language.h"
+#include "loot/language.h"
namespace loot {
Message::Message() : type_(MessageType::say) {}
@@ -84,28 +85,3 @@ SimpleMessage Message::ToSimpleMessage(const LanguageCode language) const {
return simpleMessage;
}
}
-
-namespace YAML {
-Emitter& operator << (Emitter& out, const loot::Message& rhs) {
- out << BeginMap;
-
- if (rhs.GetType() == loot::MessageType::say)
- out << Key << "type" << Value << "say";
- else if (rhs.GetType() == loot::MessageType::warn)
- out << Key << "type" << Value << "warn";
- else
- out << Key << "type" << Value << "error";
-
- if (rhs.GetContent().size() == 1)
- out << Key << "content" << Value << YAML::SingleQuoted << rhs.GetContent().front().GetText();
- else
- out << Key << "content" << Value << rhs.GetContent();
-
- if (rhs.IsConditional())
- out << Key << "condition" << Value << YAML::SingleQuoted << rhs.Condition();
-
- out << EndMap;
-
- return out;
-}
-}
diff --git a/src/backend/metadata/message_content.cpp b/src/backend/metadata/message_content.cpp
index 3b530cb0..ede2d298 100644
--- a/src/backend/metadata/message_content.cpp
+++ b/src/backend/metadata/message_content.cpp
@@ -22,11 +22,11 @@
.
*/
-#include "backend/metadata/message_content.h"
+#include "loot/metadata/message_content.h"
#include
-#include "backend/helpers/language.h"
+#include "loot/language.h"
namespace loot {
MessageContent::MessageContent() : language_(LanguageCode::english) {}
@@ -66,17 +66,3 @@ MessageContent MessageContent::Choose(const std::vector content,
}
}
}
-
-namespace YAML {
-Emitter& operator << (Emitter& out, const loot::MessageContent& rhs) {
- out << BeginMap;
-
- out << Key << "lang" << Value << loot::Language(rhs.GetLanguage()).GetLocale();
-
- out << Key << "text" << Value << YAML::SingleQuoted << rhs.GetText();
-
- out << EndMap;
-
- return out;
-}
-}
diff --git a/src/backend/metadata/plugin_cleaning_data.cpp b/src/backend/metadata/plugin_cleaning_data.cpp
index 2552821b..c4cf3fb7 100644
--- a/src/backend/metadata/plugin_cleaning_data.cpp
+++ b/src/backend/metadata/plugin_cleaning_data.cpp
@@ -22,7 +22,7 @@
.
*/
-#include "backend/metadata/plugin_cleaning_data.h"
+#include "loot/metadata/plugin_cleaning_data.h"
#include
#include
@@ -147,29 +147,3 @@ bool PluginCleaningData::EvalCondition(Game& game, const std::string& pluginName
return crc_ == crc;
}
}
-
-namespace YAML {
-Emitter& operator << (Emitter& out, const loot::PluginCleaningData& rhs) {
- out << BeginMap
- << Key << "crc" << Value << Hex << rhs.CRC() << Dec
- << Key << "util" << Value << YAML::SingleQuoted << rhs.CleaningUtility();
-
- if (!rhs.Info().empty()) {
- if (rhs.Info().size() == 1)
- out << Key << "info" << Value << YAML::SingleQuoted << rhs.Info().front().GetText();
- else
- out << Key << "info" << Value << rhs.Info();
- }
-
- if (rhs.ITMs() > 0)
- out << Key << "itm" << Value << rhs.ITMs();
- if (rhs.DeletedRefs() > 0)
- out << Key << "udr" << Value << rhs.DeletedRefs();
- if (rhs.DeletedNavmeshes() > 0)
- out << Key << "nav" << Value << rhs.DeletedNavmeshes();
-
- out << EndMap;
-
- return out;
-}
-}
diff --git a/src/backend/metadata/plugin_metadata.cpp b/src/backend/metadata/plugin_metadata.cpp
index 15b1d5ea..98dd70e5 100644
--- a/src/backend/metadata/plugin_metadata.cpp
+++ b/src/backend/metadata/plugin_metadata.cpp
@@ -22,7 +22,7 @@
.
*/
-#include "plugin_metadata.h"
+#include "loot/metadata/plugin_metadata.h"
#include
@@ -256,6 +256,10 @@ std::string PluginMetadata::Name() const {
return name_;
}
+std::string PluginMetadata::LowercasedName() const {
+ return boost::locale::to_lower(name_);
+}
+
bool PluginMetadata::Enabled() const {
return enabled_;
}
@@ -455,51 +459,3 @@ bool PluginMetadata::operator != (const std::string& rhs) const {
return !(*this == rhs);
}
}
-
-namespace YAML {
-Emitter& operator << (Emitter& out, const loot::PluginMetadata& rhs) {
- if (!rhs.HasNameOnly()) {
- out << BeginMap
- << Key << "name" << Value << YAML::SingleQuoted << rhs.Name();
-
- if (!rhs.Enabled())
- out << Key << "enabled" << Value << rhs.Enabled();
-
- if (rhs.LocalPriority().isExplicit()) {
- out << Key << "priority" << Value << rhs.LocalPriority().getValue();
- }
-
- if (rhs.GlobalPriority().isExplicit()) {
- out << Key << "global_priority" << Value << rhs.GlobalPriority().getValue();
- }
-
- if (!rhs.LoadAfter().empty())
- out << Key << "after" << Value << rhs.LoadAfter();
-
- if (!rhs.Reqs().empty())
- out << Key << "req" << Value << rhs.Reqs();
-
- if (!rhs.Incs().empty())
- out << Key << "inc" << Value << rhs.Incs();
-
- if (!rhs.Messages().empty())
- out << Key << "msg" << Value << rhs.Messages();
-
- if (!rhs.Tags().empty())
- out << Key << "tag" << Value << rhs.Tags();
-
- if (!rhs.DirtyInfo().empty())
- out << Key << "dirty" << Value << rhs.DirtyInfo();
-
- if (!rhs.CleanInfo().empty())
- out << Key << "clean" << Value << rhs.CleanInfo();
-
- if (!rhs.Locations().empty())
- out << Key << "url" << Value << rhs.Locations();
-
- out << EndMap;
- }
-
- return out;
-}
-}
diff --git a/src/backend/metadata/priority.cpp b/src/backend/metadata/priority.cpp
index 6b7a5aec..111fc732 100644
--- a/src/backend/metadata/priority.cpp
+++ b/src/backend/metadata/priority.cpp
@@ -22,7 +22,7 @@
.
*/
-#include "backend/metadata/priority.h"
+#include "loot/metadata/priority.h"
namespace loot {
Priority::Priority() : value_(0), isExplicitZeroValue_(false) {}
diff --git a/src/backend/metadata/tag.cpp b/src/backend/metadata/tag.cpp
index e8aa11e2..440537e3 100644
--- a/src/backend/metadata/tag.cpp
+++ b/src/backend/metadata/tag.cpp
@@ -22,7 +22,7 @@
.
*/
-#include "backend/metadata/tag.h"
+#include "loot/metadata/tag.h"
#include
@@ -50,25 +50,3 @@ std::string Tag::Name() const {
return name_;
}
}
-
-namespace YAML {
-Emitter& operator << (Emitter& out, const loot::Tag& rhs) {
- if (!rhs.IsConditional()) {
- if (rhs.IsAddition())
- out << rhs.Name();
- else
- out << ('-' + rhs.Name());
- } else {
- out << BeginMap;
- if (rhs.IsAddition())
- out << Key << "name" << Value << rhs.Name();
- else
- out << Key << "name" << Value << ('-' + rhs.Name());
-
- out << Key << "condition" << Value << YAML::SingleQuoted << rhs.Condition()
- << EndMap;
- }
-
- return out;
-}
-}
diff --git a/src/backend/metadata_list.cpp b/src/backend/metadata_list.cpp
index 7b743bbc..1455f764 100644
--- a/src/backend/metadata_list.cpp
+++ b/src/backend/metadata_list.cpp
@@ -29,6 +29,7 @@
#include
#include "loot/exception/file_access_error.h"
+#include "loot/yaml/plugin_metadata.h"
#include "backend/game/game.h"
namespace loot {
diff --git a/src/backend/metadata_list.h b/src/backend/metadata_list.h
index cba3d175..a3626fed 100644
--- a/src/backend/metadata_list.h
+++ b/src/backend/metadata_list.h
@@ -31,7 +31,7 @@
#include
-#include "backend/metadata/plugin_metadata.h"
+#include "loot/metadata/plugin_metadata.h"
namespace loot {
class Game;
diff --git a/src/backend/plugin/plugin.h b/src/backend/plugin/plugin.h
index 50917c08..05bba79a 100644
--- a/src/backend/plugin/plugin.h
+++ b/src/backend/plugin/plugin.h
@@ -33,7 +33,7 @@
#include
#include
-#include "backend/metadata/plugin_metadata.h"
+#include "loot/metadata/plugin_metadata.h"
#include "loot/enum/game_type.h"
namespace loot {
diff --git a/src/gui/editor_message.h b/src/gui/editor_message.h
index c1178673..8d6259e0 100644
--- a/src/gui/editor_message.h
+++ b/src/gui/editor_message.h
@@ -24,7 +24,9 @@
#ifndef LOOT_GUI_EDITOR_MESSAGE
#define LOOT_GUI_EDITOR_MESSAGE
-#include "backend/metadata/message.h"
+#include
+
+#include "loot/metadata/message.h"
#include "loot/struct/simple_message.h"
namespace loot {
diff --git a/src/gui/loot_app.cpp b/src/gui/loot_app.cpp
index c41feb3a..5899438c 100644
--- a/src/gui/loot_app.cpp
+++ b/src/gui/loot_app.cpp
@@ -30,7 +30,7 @@
#include "gui/state/loot_paths.h"
#include "backend/helpers/helpers.h"
-#include "backend/helpers/language.h"
+#include "loot/language.h"
#include "gui/loot_handler.h"
#include "gui/loot_scheme_handler_factory.h"
diff --git a/src/gui/query/copy_metadata_query.h b/src/gui/query/copy_metadata_query.h
index a8f3c8ee..3f4b4466 100644
--- a/src/gui/query/copy_metadata_query.h
+++ b/src/gui/query/copy_metadata_query.h
@@ -28,6 +28,7 @@ along with LOOT. If not, see
#include
#include "gui/query/clipboard_query.h"
+#include "loot/yaml/plugin_metadata.h"
namespace loot {
class CopyMetadataQuery : public ClipboardQuery {
diff --git a/src/gui/query/get_languages_query.h b/src/gui/query/get_languages_query.h
index 10bcc375..ac5460ab 100644
--- a/src/gui/query/get_languages_query.h
+++ b/src/gui/query/get_languages_query.h
@@ -26,7 +26,7 @@ along with LOOT. If not, see
#define LOOT_GUI_QUERY_GET_LANGUAGES_QUERY
#include "gui/query/json.h"
-#include "backend/helpers/language.h"
+#include "loot/language.h"
#include "gui/query/query.h"
namespace loot {
diff --git a/src/gui/query_handler.h b/src/gui/query_handler.h
index 215122ec..9420cd6d 100644
--- a/src/gui/query_handler.h
+++ b/src/gui/query_handler.h
@@ -30,7 +30,7 @@
#include "gui/state/loot_state.h"
#include "backend/plugin/plugin.h"
-#include "backend/metadata/plugin_metadata.h"
+#include "loot/metadata/plugin_metadata.h"
#include "gui/editor_message.h"
#include "gui/query/query.h"
diff --git a/src/gui/state/loot_settings.h b/src/gui/state/loot_settings.h
index 2166b29e..1cc84a26 100644
--- a/src/gui/state/loot_settings.h
+++ b/src/gui/state/loot_settings.h
@@ -34,7 +34,7 @@
#include
#include "backend/game/game_settings.h"
-#include "backend/helpers/language.h"
+#include "loot/language.h"
namespace loot {
class LootSettings {
diff --git a/src/gui/state/loot_state.cpp b/src/gui/state/loot_state.cpp
index b485af8f..425a140a 100644
--- a/src/gui/state/loot_state.cpp
+++ b/src/gui/state/loot_state.cpp
@@ -24,6 +24,7 @@
#include "gui/state/loot_state.h"
+#include
#include
#include
#include
@@ -36,7 +37,7 @@
#include "loot/exception/game_detection_error.h"
#include "backend/helpers/helpers.h"
-#include "backend/helpers/language.h"
+#include "loot/language.h"
#include "gui/state/loot_paths.h"
#include "loot/loot_version.h"
diff --git a/src/tests/backend/helpers/language_test.h b/src/tests/backend/helpers/language_test.h
index 2f806158..25fd6f61 100644
--- a/src/tests/backend/helpers/language_test.h
+++ b/src/tests/backend/helpers/language_test.h
@@ -25,7 +25,7 @@ along with LOOT. If not, see
#ifndef LOOT_TESTS_BACKEND_HELPERS_LANGUAGE_TEST
#define LOOT_TESTS_BACKEND_HELPERS_LANGUAGE_TEST
-#include "backend/helpers/language.h"
+#include "loot/language.h"
#include
diff --git a/src/tests/backend/helpers/yaml_set_helpers_test.h b/src/tests/backend/helpers/yaml_set_helpers_test.h
index dba2a55a..a040910e 100644
--- a/src/tests/backend/helpers/yaml_set_helpers_test.h
+++ b/src/tests/backend/helpers/yaml_set_helpers_test.h
@@ -25,7 +25,7 @@ along with LOOT. If not, see
#ifndef LOOT_TESTS_BACKEND_HELPERS_YAML_SET_HELPERS_TEST
#define LOOT_TESTS_BACKEND_HELPERS_YAML_SET_HELPERS_TEST
-#include "backend/helpers/yaml_set_helpers.h"
+#include "loot/yaml/set.h"
#include
diff --git a/src/tests/backend/metadata/conditional_metadata_test.h b/src/tests/backend/metadata/conditional_metadata_test.h
index 4280f095..f734fa0b 100644
--- a/src/tests/backend/metadata/conditional_metadata_test.h
+++ b/src/tests/backend/metadata/conditional_metadata_test.h
@@ -25,7 +25,7 @@ along with LOOT. If not, see
#ifndef LOOT_TESTS_BACKEND_METADATA_CONDITIONAL_METADATA_TEST
#define LOOT_TESTS_BACKEND_METADATA_CONDITIONAL_METADATA_TEST
-#include "backend/metadata/conditional_metadata.h"
+#include "loot/metadata/conditional_metadata.h"
#include "tests/common_game_test_fixture.h"
diff --git a/src/tests/backend/metadata/file_test.h b/src/tests/backend/metadata/file_test.h
index 88553fbc..853fde18 100644
--- a/src/tests/backend/metadata/file_test.h
+++ b/src/tests/backend/metadata/file_test.h
@@ -25,10 +25,12 @@ along with LOOT. If not, see
#ifndef LOOT_TESTS_BACKEND_METADATA_FILE_TEST
#define LOOT_TESTS_BACKEND_METADATA_FILE_TEST
-#include "backend/metadata/file.h"
+#include "loot/metadata/file.h"
#include
+#include "loot/yaml/file.h"
+
namespace loot {
namespace test {
TEST(File, defaultConstructorShouldInitialiseEmptyStrings) {
diff --git a/src/tests/backend/metadata/location_test.h b/src/tests/backend/metadata/location_test.h
index 0e362d4c..d4fa25ea 100644
--- a/src/tests/backend/metadata/location_test.h
+++ b/src/tests/backend/metadata/location_test.h
@@ -25,10 +25,12 @@ along with LOOT. If not, see
#ifndef LOOT_TESTS_BACKEND_METADATA_LOCATION_TEST
#define LOOT_TESTS_BACKEND_METADATA_LOCATION_TEST
-#include "backend/metadata/location.h"
+#include "loot/metadata/location.h"
#include
+#include "loot/yaml/location.h"
+
namespace loot {
namespace test {
TEST(Location, defaultConstructorShouldInitialiseEmptyStrings) {
diff --git a/src/tests/backend/metadata/message_content_test.h b/src/tests/backend/metadata/message_content_test.h
index 1d2e15a0..961346af 100644
--- a/src/tests/backend/metadata/message_content_test.h
+++ b/src/tests/backend/metadata/message_content_test.h
@@ -25,10 +25,12 @@ along with LOOT. If not, see
#ifndef LOOT_TESTS_BACKEND_METADATA_MESSAGE_CONTENT_TEST
#define LOOT_TESTS_BACKEND_METADATA_MESSAGE_CONTENT_TEST
-#include "backend/metadata/message_content.h"
+#include "loot/metadata/message_content.h"
#include
+#include "loot/yaml/message_content.h"
+
namespace loot {
namespace test {
TEST(MessageContent, defaultConstructorShouldSetEmptyEnglishLanguageString) {
diff --git a/src/tests/backend/metadata/message_test.h b/src/tests/backend/metadata/message_test.h
index 8f49d76a..e861c242 100644
--- a/src/tests/backend/metadata/message_test.h
+++ b/src/tests/backend/metadata/message_test.h
@@ -25,9 +25,10 @@ along with LOOT. If not, see
#ifndef LOOT_TESTS_BACKEND_METADATA_MESSAGE_TEST
#define LOOT_TESTS_BACKEND_METADATA_MESSAGE_TEST
-#include "backend/metadata/message.h"
+#include "loot/metadata/message.h"
#include "backend/game/game.h"
+#include "loot/yaml/message.h"
#include "tests/common_game_test_fixture.h"
namespace loot {
diff --git a/src/tests/backend/metadata/plugin_cleaning_data_test.h b/src/tests/backend/metadata/plugin_cleaning_data_test.h
index 153e4f6a..03144677 100644
--- a/src/tests/backend/metadata/plugin_cleaning_data_test.h
+++ b/src/tests/backend/metadata/plugin_cleaning_data_test.h
@@ -25,9 +25,10 @@ along with LOOT. If not, see
#ifndef LOOT_TESTS_BACKEND_METADATA_PLUGIN_CLEANING_DATA
#define LOOT_TESTS_BACKEND_METADATA_PLUGIN_CLEANING_DATA
-#include "backend/metadata/plugin_cleaning_data.h"
+#include "loot/metadata/plugin_cleaning_data.h"
#include "backend/game/game.h"
+#include "loot/yaml/plugin_cleaning_data.h"
#include "tests/common_game_test_fixture.h"
namespace loot {
diff --git a/src/tests/backend/metadata/plugin_metadata_test.h b/src/tests/backend/metadata/plugin_metadata_test.h
index 54e3c534..add940cf 100644
--- a/src/tests/backend/metadata/plugin_metadata_test.h
+++ b/src/tests/backend/metadata/plugin_metadata_test.h
@@ -25,10 +25,12 @@ along with LOOT. If not, see
#ifndef LOOT_TESTS_BACKEND_METADATA_PLUGIN_METADATA_TEST
#define LOOT_TESTS_BACKEND_METADATA_PLUGIN_METADATA_TEST
-#include "backend/metadata/plugin_metadata.h"
+#include "loot/metadata/plugin_metadata.h"
#include "tests/common_game_test_fixture.h"
+#include "loot/yaml/plugin_metadata.h"
+
namespace loot {
namespace test {
class PluginMetadataTest : public CommonGameTestFixture {
diff --git a/src/tests/backend/metadata/priority_test.h b/src/tests/backend/metadata/priority_test.h
index 418365cd..7b353ded 100644
--- a/src/tests/backend/metadata/priority_test.h
+++ b/src/tests/backend/metadata/priority_test.h
@@ -25,7 +25,7 @@ along with LOOT. If not, see
#ifndef LOOT_TESTS_BACKEND_METADATA_PRIORITY_TEST
#define LOOT_TESTS_BACKEND_METADATA_PRIORITY_TEST
-#include "backend/metadata/priority.h"
+#include "loot/metadata/priority.h"
#include
diff --git a/src/tests/backend/metadata/tag_test.h b/src/tests/backend/metadata/tag_test.h
index 75f7ec44..a1f27a7b 100644
--- a/src/tests/backend/metadata/tag_test.h
+++ b/src/tests/backend/metadata/tag_test.h
@@ -25,10 +25,12 @@ along with LOOT. If not, see
#ifndef LOOT_TESTS_BACKEND_METADATA_TAG_TEST
#define LOOT_TESTS_BACKEND_METADATA_TAG_TEST
-#include "backend/metadata/tag.h"
+#include "loot/metadata/tag.h"
#include
+#include "loot/yaml/tag.h"
+
namespace loot {
namespace test {
TEST(Tag, defaultConstructorShouldSetEmptyNameAndConditionStringsForATagAddition) {
diff --git a/src/tests/printers.h b/src/tests/printers.h
index 663d4a74..d5e86eab 100644
--- a/src/tests/printers.h
+++ b/src/tests/printers.h
@@ -29,13 +29,13 @@ along with LOOT. If not, see
#include
-#include "backend/metadata/file.h"
-#include "backend/metadata/location.h"
-#include "backend/metadata/message.h"
+#include "loot/metadata/file.h"
+#include "loot/metadata/location.h"
+#include "loot/metadata/message.h"
#include "backend/metadata/message_content.h"
-#include "backend/metadata/plugin_cleaning_data.h"
-#include "backend/metadata/plugin_metadata.h"
-#include "backend/metadata/tag.h"
+#include "loot/metadata/plugin_cleaning_data.h"
+#include "loot/metadata/plugin_metadata.h"
+#include "loot/metadata/tag.h"
#include "backend/plugin/plugin.h"
namespace loot {