// Copyright (c) 2023 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #pragma once #include "util/XmlParser.hpp" #include "util/CodeGen.hpp" namespace Dawn { typedef std::vector include_t; class IncludeParser : public XmlParser { protected: std::vector getRequiredAttributes() { return std::vector{ "path" }; } std::map getOptionalAttributes() { return std::map(); } int32_t onParse( Xml *node, std::map values, include_t *out, std::string *error ) { if(values["path"].size() == 0) { *error = ""; return 1; } out->push_back(values["path"]); return 0; } }; class IncludeGen : public CodeGen { public: static void generate( std::vector *out, include_t includes, std::string tabs ) { std::vector generated; auto it = includes.begin(); while(it != includes.end()) { if(std::find(generated.begin(), generated.end(), *it) == generated.end()) { line(out, "#include \"" + *it + "\"", tabs); generated.push_back(*it); } ++it; } } }; }