Add regex for title text version of links

* Add regex for title text version of links

Original parser matched:
  [name](http:://link)

Add match for:
  [name](http:://link "title text")

* Add tests and improve regex's
* Several new tests in test_maddy_linkparser.cpp  (Some with paths for future improvement, and one to ensure an overzealous future update doesn't disallow actually-used special characters like o-umlaut).
* URLs now ignore leading/trailing spaces.
* URLs now don't match on internal spaces or quotes.
* Small grammar fix in CONTRIBUTING.md
* Updated changelog.
This commit is contained in:
Lucian Smith
2025-04-20 09:45:27 -07:00
committed by GitHub
parent af59cd13d4
commit 2a00c9fb0b
6 changed files with 166 additions and 6 deletions

View File

@@ -40,10 +40,17 @@ public:
*/
void Parse(std::string& line) override
{
static std::regex re(R"(\[([^\]]*)\]\(([^)]*)\))");
static std::string replacement = "<a href=\"$2\">$1</a>";
// Match [name](http:://link "title text")
// NOTE: the 'no quote' bit at the beginning (^") is a hack for now:
// there should eventually be something that replaces it with '%22'.
static std::regex re(R"(\[([^\]]*)\]\( *([^)^ ^"]*) *\"([^\"]*)\" *\))");
static std::string replacement = "<a href=\"$2\" title=\"$3\">$1</a>";
line = std::regex_replace(line, re, replacement);
// Match [name](http:://link)
static std::regex re2(R"(\[([^\]]*)\]\( *([^)^ ^"]*) *\))");
static std::string replacement2 = "<a href=\"$2\">$1</a>";
line = std::regex_replace(line, re2, replacement2);
}
}; // class LinkParser