Parser: Seperate parseDynamcis(), fix headline extraction with tags inside them
This commit is contained in:
rodzic
15e4f081cc
commit
fbca85e5ed
@ -23,6 +23,10 @@ class IParser
|
|||||||
}
|
}
|
||||||
virtual std::string parse(const PageDao &pagedao, UrlProvider &provider, const std::string &content,
|
virtual std::string parse(const PageDao &pagedao, UrlProvider &provider, const std::string &content,
|
||||||
const std::function<std::string(std::string_view, std::string_view)> &callback) const = 0;
|
const std::function<std::string(std::string_view, std::string_view)> &callback) const = 0;
|
||||||
|
|
||||||
|
virtual std::string parseDynamics(
|
||||||
|
const std::string &content,
|
||||||
|
const std::function<std::string(std::string_view, std::string_view)> &callback) const = 0;
|
||||||
virtual std::vector<std::string> extractCategories(const std::string &content) const = 0;
|
virtual std::vector<std::string> extractCategories(const std::string &content) const = 0;
|
||||||
|
|
||||||
virtual ~IParser(){};
|
virtual ~IParser(){};
|
||||||
|
15
parser.cpp
15
parser.cpp
@ -30,7 +30,8 @@ SOFTWARE.
|
|||||||
std::vector<Headline> Parser::extractHeadlines(const std::string &content) const
|
std::vector<Headline> Parser::extractHeadlines(const std::string &content) const
|
||||||
{
|
{
|
||||||
std::vector<Headline> result;
|
std::vector<Headline> result;
|
||||||
std::string reg = R"(\[h(1|2|3)\](.*?)\[/h\1\])";
|
|
||||||
|
std::string reg = R"(\[h(1|2|3)\](\[.*?\])*(.*?)\[.*?\]*\[\/h\1\])";
|
||||||
std::regex headerfinder(reg);
|
std::regex headerfinder(reg);
|
||||||
auto begin = std::sregex_iterator(content.begin(), content.end(), headerfinder);
|
auto begin = std::sregex_iterator(content.begin(), content.end(), headerfinder);
|
||||||
auto end = std::sregex_iterator();
|
auto end = std::sregex_iterator();
|
||||||
@ -40,7 +41,7 @@ std::vector<Headline> Parser::extractHeadlines(const std::string &content) const
|
|||||||
auto smatch = *it;
|
auto smatch = *it;
|
||||||
Headline h;
|
Headline h;
|
||||||
h.level = utils::toUInt(smatch.str(1));
|
h.level = utils::toUInt(smatch.str(1));
|
||||||
h.title = smatch.str(2);
|
h.title = smatch.str(3);
|
||||||
result.push_back(h);
|
result.push_back(h);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -122,7 +123,7 @@ std::string Parser::parse(const PageDao &pagedao, UrlProvider &provider, const s
|
|||||||
std::string result;
|
std::string result;
|
||||||
// we don't care about commands, but we nevertheless replace them with empty strings
|
// we don't care about commands, but we nevertheless replace them with empty strings
|
||||||
std::regex tagfinder(
|
std::regex tagfinder(
|
||||||
R"(\[(b|i|u|li||ul|ol|link|wikilink|h\d|cmd:rename|cmd:redirect|cmd:pagetitle|category|dynamic:postlist|dynamic:includepage)*?\]((\s|\S)*?)\[/\1])");
|
R"(\[(b|i|u|li||ul|ol|link|wikilink|h\d|cmd:rename|cmd:redirect|cmd:pagetitle|category|dynamic:postlist|dynamic:includepage|dynamic:getvar|dynamic:setvar)*?\]((\s|\S)*?)\[/\1])");
|
||||||
result = utils::regex_callback_replacer(
|
result = utils::regex_callback_replacer(
|
||||||
tagfinder, content,
|
tagfinder, content,
|
||||||
[&](std::smatch &match)
|
[&](std::smatch &match)
|
||||||
@ -150,3 +151,11 @@ std::string Parser::parse(const PageDao &pagedao, UrlProvider &provider, const s
|
|||||||
result = utils::strreplace(result, "\r\n", "<br>");
|
result = utils::strreplace(result, "\r\n", "<br>");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string Parser::parseDynamics(const std::string &content,
|
||||||
|
const std::function<std::string(std::string_view, std::string_view)> &callback) const
|
||||||
|
{
|
||||||
|
std::regex tagfinder(R"(\[(dynamic:\w+)*?\]((\s|\S)*?)\[/\1])");
|
||||||
|
return utils::regex_callback_replacer(tagfinder, content,
|
||||||
|
[&](std::smatch &match) { return callback(match.str(1), match.str(2)); });
|
||||||
|
}
|
||||||
|
3
parser.h
3
parser.h
@ -15,6 +15,9 @@ class Parser : public IParser
|
|||||||
virtual std::string parse(
|
virtual std::string parse(
|
||||||
const PageDao &pagedao, UrlProvider &provider, const std::string &content,
|
const PageDao &pagedao, UrlProvider &provider, const std::string &content,
|
||||||
const std::function<std::string(std::string_view, std::string_view)> &callback) const override;
|
const std::function<std::string(std::string_view, std::string_view)> &callback) const override;
|
||||||
|
std::string parseDynamics(
|
||||||
|
const std::string &content,
|
||||||
|
const std::function<std::string(std::string_view, std::string_view)> &callback) const override;
|
||||||
|
|
||||||
using IParser::IParser;
|
using IParser::IParser;
|
||||||
};
|
};
|
||||||
|
Ładowanie…
Reference in New Issue
Block a user