diff --git a/handlers/handlerpageview.cpp b/handlers/handlerpageview.cpp index ec32d61..dce8a2b 100644 --- a/handlers/handlerpageview.cpp +++ b/handlers/handlerpageview.cpp @@ -167,6 +167,7 @@ Response HandlerPageView::handleRequest(PageDao &pageDao, std::string pagename, } } std::string revisionstr = std::to_string(revision->revision); + std::string customtitle = parser.extractCommand("pagetitle", revision->content); page.setVar("content", parsedcontent); page.setVar("index", indexcontent); page.setVar("editedby", revision->author); @@ -174,6 +175,10 @@ Response HandlerPageView::handleRequest(PageDao &pageDao, std::string pagename, page.setVar("historyurl", this->urlProvider->pageHistory(pagename)); page.setVar("revision", revisionstr); setPageVars(page, pagename); + if(!customtitle.empty()) + { + page.setVar("title", createPageTitle(customtitle)); + } std::string body = page.render(); if(revisionid == 0 && !this->userSession->loggedIn) { diff --git a/parser.cpp b/parser.cpp index 8ee460c..ae4e9be 100644 --- a/parser.cpp +++ b/parser.cpp @@ -120,27 +120,32 @@ std::string Parser::parse(const PageDao &pagedao, UrlProvider &provider, std::st { std::string result; // we don't care about commands, but we nevertheless replace them with empty strings - std::regex tagfinder(R"(\[(b|i|u|li||ul|ol|link|wikilink|h\d|cmd:rename|cmd:redirect|category)*?\]((\s|\S)*?)\[/\1])"); - result = utils::regex_callback_replacer(tagfinder, content, [&](std::smatch &match) { - std::string tag = match.str(1); - std::string content = match.str(2); - std::string justreplace[] = {"b", "i", "u", "ul", "li", "ol"}; - content = parse(pagedao, provider, content); - if(std::find(std::begin(justreplace), std::end(justreplace), tag) != std::end(justreplace)) + std::regex tagfinder( + R"(\[(b|i|u|li||ul|ol|link|wikilink|h\d|cmd:rename|cmd:redirect|cmd:pagetitle|category)*?\]((\s|\S)*?)\[/\1])"); + result = utils::regex_callback_replacer( + tagfinder, content, + [&](std::smatch &match) { - return "<" + tag + ">" + content + ""; - } - if(tag == "link" || tag == "wikilink") - { - return this->processLink(pagedao, provider, - match); // TODO: recreate this so we don't check inside the function stuff again - } - if(tag[0] == 'h') - { - return "<" + tag + " id='" + content + "'>" + content + ""; - } - return std::string(""); - }); + std::string tag = match.str(1); + std::string content = match.str(2); + std::string justreplace[] = {"b", "i", "u", "ul", "li", "ol"}; + content = parse(pagedao, provider, content); + if(std::find(std::begin(justreplace), std::end(justreplace), tag) != std::end(justreplace)) + { + return "<" + tag + ">" + content + ""; + } + if(tag == "link" || tag == "wikilink") + { + return this->processLink( + pagedao, provider, + match); // TODO: recreate this so we don't check inside the function stuff again + } + if(tag[0] == 'h') + { + return "<" + tag + " id='" + content + "'>" + content + ""; + } + return std::string(""); + }); result = utils::strreplace(result, "\r\n", "
"); return result; }