From c17d1adedb1c39f92a35aa3da414b96f4057b432 Mon Sep 17 00:00:00 2001 From: Philipp Doerner Date: Thu, 26 Jan 2023 15:46:11 +0100 Subject: [PATCH 1/4] #331 FIX emphasizing matching in search hits When highlighting text with "*" in markdown, it needs space between the hit enshrined by "**" to get boldened. This is not always the case. Therefore we add whitespaces before/after the ** This way we can enforce that it properly gets boldened. https://github.com/nim-lang/nimforum/issues/331 --- src/fts.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fts.sql b/src/fts.sql index 1590a05..b613fa3 100644 --- a/src/fts.sql +++ b/src/fts.sql @@ -44,7 +44,7 @@ SELECT thread.name AS thread, post.id AS post_id, CASE what WHEN 1 - THEN snippet(post_fts, '**', '**', '...', what, -45) + THEN snippet(post_fts, ' **', '** ', '...', what, -45) ELSE SUBSTR(post_fts.content, 1, 200) END AS content, cdate, person.id, From dfa165ce5487f40717a841b27a7947e32c3d5134 Mon Sep 17 00:00:00 2001 From: Philipp Doerner Date: Thu, 26 Jan 2023 15:48:50 +0100 Subject: [PATCH 2/4] #331 FIX search hits getting headlines inserted Sometimes search-results contain the string `## `. They do occur as code comments in code-blocks. If they get recognized, they get turned into headlines. To avoid this, a replace statement was added. https://github.com/nim-lang/nimforum/issues/331 --- src/forum.nim | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/forum.nim b/src/forum.nim index d1b6363..9b225a6 100644 --- a/src/forum.nim +++ b/src/forum.nim @@ -1620,6 +1620,8 @@ routes: ] for rowFT in fastRows(db, queryFT, data): var content = rowFT[3] + content = content.replace("# ", "\\# ") + try: content = content.rstToHtml() except EParseError: discard results.add( SearchResult( From 2a0324d6f30f21cb78e914c4b7271d7805a992fa Mon Sep 17 00:00:00 2001 From: Philipp Doerner Date: Thu, 26 Jan 2023 15:49:25 +0100 Subject: [PATCH 3/4] REFACTOR naming of variables for clarity --- src/forum.nim | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/forum.nim b/src/forum.nim index 9b225a6..7e27562 100644 --- a/src/forum.nim +++ b/src/forum.nim @@ -1607,16 +1607,17 @@ routes: get "/search.json": cond "q" in request.params - let q = @"q" - cond q.len > 0 + let searchTerm: string = @"q" + cond searchTerm.len > 0 var results: seq[SearchResult] = @[] const queryFT = "fts.sql".slurp.sql - const count = 40 + const count: string = $40 + const offset: string = $0 let data = [ - q, q, $count, $0, q, - q, $count, $0, q + searchTerm, searchTerm, count, offset, searchTerm, + searchTerm, count, offset, searchTerm ] for rowFT in fastRows(db, queryFT, data): var content = rowFT[3] From cd7b8afa8a387ecfd958e40665abf07e49ea1bda Mon Sep 17 00:00:00 2001 From: Philipp Doerner Date: Thu, 26 Jan 2023 16:22:59 +0100 Subject: [PATCH 4/4] #331 FIX search hits getting hyperlinks inserted Sometimes search-results contain the string `[`. They do occur as generics in code-blocks. If they get recognized, they get turned into links. To avoid this, a replace statement was added. https://github.com/nim-lang/nimforum/issues/331 --- src/forum.nim | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/forum.nim b/src/forum.nim index 7e27562..f413252 100644 --- a/src/forum.nim +++ b/src/forum.nim @@ -807,6 +807,15 @@ proc updateProfile( $rank, email, username ) +proc escapeMDCharacters(s: string): string = + ## Escapes problematic Markdown characters: + ## `# ` as it gets interpreted as headline + ## `[` as it gets interpreted as startingpoint for a hyperlink + const headlineHash = ("# ", "\\# ") + const linkBracket = ("[", "\\[") + result = s.multireplace(@[headlineHash, linkBracket]) + + include "main.tmpl" initialise() @@ -1621,7 +1630,7 @@ routes: ] for rowFT in fastRows(db, queryFT, data): var content = rowFT[3] - content = content.replace("# ", "\\# ") + content = content.escapeMDCharacters() try: content = content.rstToHtml() except EParseError: discard results.add(