summaryrefslogtreecommitdiff
path: root/src/factories/IncludeFactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/factories/IncludeFactory.cpp')
-rw-r--r--src/factories/IncludeFactory.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/factories/IncludeFactory.cpp b/src/factories/IncludeFactory.cpp
new file mode 100644
index 0000000..bf3d268
--- /dev/null
+++ b/src/factories/IncludeFactory.cpp
@@ -0,0 +1,48 @@
+#include "IncludeFactory.h"
+#include "spdlog/spdlog.h"
+
+#include "Companion.h"
+#include "utils/Decompressor.h"
+
+#define NUM(x) std::dec << std::setfill(' ') << std::setw(6) << x
+#define COL(c) std::dec << std::setfill(' ') << std::setw(3) << c
+
+ExportResult IncludeHeaderExporter::Export(std::ostream &write, std::shared_ptr<IParsedData> raw, std::string& entryName, YAML::Node &node, std::string* replacement) {
+ const auto symbol = GetSafeNode(node, "symbol", entryName);
+ auto ctype = GetSafeNode<std::string>(node, "ctype");
+
+ if(Companion::Instance->IsOTRMode()){
+ write << "static const char " << symbol << "[] = \"__OTR__" << (*replacement) << "\";\n\n";
+ return std::nullopt;
+ }
+
+ write << "extern " << ctype << " " << symbol << "[];\n";
+ return std::nullopt;
+}
+
+ExportResult IncludeCodeExporter::Export(std::ostream &write, std::shared_ptr<IParsedData> raw, std::string& entryName, YAML::Node &node, std::string* replacement ) {
+ const auto symbol = GetSafeNode(node, "symbol", entryName);
+ const auto file = GetSafeNode<std::string>(node, "file_path");
+ const auto ctype = GetSafeNode<std::string>(node, "ctype");
+ SPDLOG_INFO("writing INC");
+ write << ctype << " " << symbol << "[] = {\n";
+
+ write << fourSpaceTab << "#include '" << file << "'\n";
+
+ write << "};\n\n";
+
+ return std::nullopt;
+}
+
+ExportResult IncludeBinaryExporter::Export(std::ostream &write, std::shared_ptr<IParsedData> raw, std::string& entryName, YAML::Node &node, std::string* replacement ) {
+ throw std::runtime_error("Include factory should not be used for otr/o2r mode.");
+ return std::nullopt;
+}
+
+std::optional<std::shared_ptr<IParsedData>> IncludeFactory::parse(std::vector<uint8_t>& buffer, YAML::Node& node) {
+
+ SPDLOG_INFO("parsing INC");
+ const uint32_t blank = 1;
+
+ return std::make_shared<IncludeData>(blank);
+} \ No newline at end of file