From 81f4371c2083c5f31c8abc07592d25c9f69741a6 Mon Sep 17 00:00:00 2001 From: MegaMech Date: Sun, 24 Mar 2024 21:27:07 -0600 Subject: Add Include Factory (#51) * Add Include Factory * Fix * Fixes * Update --------- Co-authored-by: = <=> --- src/factories/IncludeFactory.cpp | 48 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/factories/IncludeFactory.cpp (limited to 'src/factories/IncludeFactory.cpp') 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 raw, std::string& entryName, YAML::Node &node, std::string* replacement) { + const auto symbol = GetSafeNode(node, "symbol", entryName); + auto ctype = GetSafeNode(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 raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + const auto symbol = GetSafeNode(node, "symbol", entryName); + const auto file = GetSafeNode(node, "file_path"); + const auto ctype = GetSafeNode(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 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> IncludeFactory::parse(std::vector& buffer, YAML::Node& node) { + + SPDLOG_INFO("parsing INC"); + const uint32_t blank = 1; + + return std::make_shared(blank); +} \ No newline at end of file -- cgit v1.2.3