From b53a0ef46714ad8b4e6a5dd0630c2f73c8433011 Mon Sep 17 00:00:00 2001 From: Xnoe Date: Wed, 22 Jul 2020 00:19:29 +0100 Subject: [PATCH] Some changes. --- main.cpp | 69 ++++++++++++++++++++++++++------------------------------ 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/main.cpp b/main.cpp index 184cca6..321a51b 100644 --- a/main.cpp +++ b/main.cpp @@ -30,41 +30,40 @@ string32 readfile(std::string name) { class frontMatter { void set(string32 key, string32 val) { - values[std::string(key.asChar())] = val; + char* asChar = key.asChar(); + values[std::string(asChar)] = val; + delete asChar; } public: char* layout; bool hasLayout = false; string32 parsed; std::unordered_map values; + frontMatter(string32 unparsedPage) { std::vector lines = unparsedPage.split("\n"); - if (lines.front() == "---") { - int line = 1; - for (;lines[line]!="---";line++) { - std::vector dataToParse = lines[line].split(": "); - if (dataToParse[0] == "layout") { - layout = dataToParse[1].asChar(); - hasLayout = true; - } else + if (lines.front() != "---") + parsed = unparsedPage; + else { + int line (0); + while (line++, lines[line]!="---") { + std::vector dataToParse = lines[line].split(": "); + if (dataToParse[0] == "layout") + hasLayout = layout = dataToParse[1].asChar(), true; + else set("page." + dataToParse[0], dataToParse[1]); } line++; - for (;line config = readfile("source/_config.yml").split("\n"); for (string32 line : config) { std::vector split = line.split(": "); set("site." + split[0], split[1]); } } - string32 operator[](string32 s) { - return values[std::string(s.asChar())]; - } }; string32 parsePageHTML(string32 pageContents) { @@ -74,48 +73,44 @@ string32 parsePageHTML(string32 pageContents) { page = readfile("source/_layouts/" + std::string(fm.layout) + ".html").replace("{{ content }}", fm.parsed); else page = fm.parsed; + for (auto pair : fm.values) page.replaceSelfAll("{{ " + pair.first + " }}", pair.second); - int i (0); + string32 searchString = "{% "; - string32 endString = " %}"; - while (i < page.cs.size()) { - int havematched (0); - for (;i split = string32(page, si+4, ei+1).split(" "); page.cs.erase(page.cs.begin()+si, page.cs.begin()+ei+4); - std::vector split = testString.split(" "); if (split[0] == "include") { string32 toInclude = readfile("source/_includes/" + std::string(split[1].asChar())); page.cs.insert(page.cs.begin()+si, toInclude.cs.begin(), toInclude.cs.end()); } - i = 0; - si = 0; - ei = 0; } return page; }