Parser: Add code,blockquote and begin img tag
This commit is contained in:
		
							
								
								
									
										33
									
								
								parser.cpp
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								parser.cpp
									
									
									
									
									
								
							@@ -117,20 +117,45 @@ std::string Parser::processLink(const PageDao &pageDao, UrlProvider &urlProvider
 | 
				
			|||||||
	return htmllink.render();
 | 
						return htmllink.render();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::string Parser::processImage(std::smatch &match) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						std::string tag = match.str(1);
 | 
				
			||||||
 | 
						std::string inside = match.str(2);
 | 
				
			||||||
 | 
						std::vector<std::string> splitted = utils::split(inside, '|');
 | 
				
			||||||
 | 
						std::string width;
 | 
				
			||||||
 | 
						std::string height;
 | 
				
			||||||
 | 
						std::string src;
 | 
				
			||||||
 | 
						if(splitted.size() == 3)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							width = splitted[0];
 | 
				
			||||||
 | 
							height = splitted[1];
 | 
				
			||||||
 | 
							src = splitted[2];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							src = splitted[0];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if(!width.empty() && !height.empty())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return "<img src=\"" + src + "\" width=\"" + width + "\" height=\"" + height + "\"/>";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return "<img src=\"" + src + "\"/>";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
std::string Parser::parse(const PageDao &pagedao, UrlProvider &provider, const std::string &content,
 | 
					std::string Parser::parse(const PageDao &pagedao, UrlProvider &provider, const std::string &content,
 | 
				
			||||||
						  const std::function<std::string(std::string_view, std::string_view)> &callback) const
 | 
											  const std::function<std::string(std::string_view, std::string_view)> &callback) const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	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:visible|cmd:rename|cmd:redirect|cmd:pagetitle|category|dynamic:postlist|dynamic:includepage|dynamic:getvar|dynamic:setvar)*?\]((\s|\S)*?)\[/\1])");
 | 
							R"(\[(b|i|u|li||ul|ol|code|blockquote|img|link|wikilink|h\d|cmd:visible|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)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			std::string tag = match.str(1);
 | 
								std::string tag = match.str(1);
 | 
				
			||||||
			std::string content = match.str(2);
 | 
								std::string content = match.str(2);
 | 
				
			||||||
			std::string justreplace[] = {"b", "i", "u", "ul", "li", "ol"};
 | 
								std::string justreplace[] = {"b", "i", "u", "ul", "li", "ol", "code", "blockquote"};
 | 
				
			||||||
			content = parse(pagedao, provider, content, callback);
 | 
								content = parse(pagedao, provider, content, callback);
 | 
				
			||||||
			if(std::find(std::begin(justreplace), std::end(justreplace), tag) != std::end(justreplace))
 | 
								if(std::find(std::begin(justreplace), std::end(justreplace), tag) != std::end(justreplace))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -142,6 +167,10 @@ std::string Parser::parse(const PageDao &pagedao, UrlProvider &provider, const s
 | 
				
			|||||||
					pagedao, provider,
 | 
										pagedao, provider,
 | 
				
			||||||
					match); // TODO: recreate this so we don't check inside the function stuff again
 | 
										match); // TODO: recreate this so we don't check inside the function stuff again
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								if(tag == "img")
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									return this->processImage(match);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			if(tag[0] == 'h')
 | 
								if(tag[0] == 'h')
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				return "<" + tag + " id='" + content + "'>" + content + "</" + tag + ">";
 | 
									return "<" + tag + " id='" + content + "'>" + content + "</" + tag + ">";
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								parser.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								parser.h
									
									
									
									
									
								
							@@ -6,6 +6,7 @@ class Parser : public IParser
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  private:
 | 
					  private:
 | 
				
			||||||
	std::string processLink(const PageDao &pageDao, UrlProvider &urlProvider, std::smatch &match) const;
 | 
						std::string processLink(const PageDao &pageDao, UrlProvider &urlProvider, std::smatch &match) const;
 | 
				
			||||||
 | 
						std::string processImage(std::smatch &match) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public:
 | 
					  public:
 | 
				
			||||||
	std::string extractCommand(std::string cmdname, const std::string &content) const;
 | 
						std::string extractCommand(std::string cmdname, const std::string &content) const;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user