core: support **text** as bold markdown (#7444)

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
This commit is contained in:
Evgeny
2026-09-01 12:27:53 +01:00
committed by GitHub
co-authored by Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
parent d131173e83
commit f71b132536
2 changed files with 30 additions and 3 deletions
+7 -1
View File
@@ -211,7 +211,7 @@ markdownP = mconcat <$> A.many' fragmentP
Just c -> case c of
' ' -> unmarked <$> A.takeWhile (== ' ')
'+' -> phoneP <|> wordP
'*' -> formattedP '*' Bold
'*' -> boldP <|> formattedP '*' Bold
'_' -> formattedP '_' Italic
'~' -> formattedP '~' StrikeThrough
'`' -> formattedP '`' Snippet
@@ -233,6 +233,12 @@ markdownP = mconcat <$> A.many' fragmentP
| T.null s || T.head s == ' ' || T.last s == ' ' =
unmarked $ c `T.cons` s `T.snoc` c
| otherwise = markdown f s
boldP :: Parser Markdown
boldP = do
s <- A.string "**" *> A.takeTill (== '*') <* A.string "**"
if T.null s || T.head s == ' ' || T.last s == ' '
then fail "not bold"
else pure $ markdown Bold s
secretP :: Parser Markdown
secretP = secret <$?> ((,,) <$> A.takeWhile (== '#') <*> A.takeTill (== '#') <*> A.takeWhile1 (== '#'))
secret :: (Text, Text, Text) -> Either String Markdown
+23 -2
View File
@@ -74,6 +74,19 @@ textFormat = describe "text format (bold)" do
<==> "this is " <> bold "bold" <> " "
"this is *bold* "
<==> "this is " <> bold "bold" <> " "
it "correct markdown with double asterisk" do
"this is **bold formatted** text"
==> "this is " <> bold "bold formatted" <> " text"
"**bold formatted** text"
==> bold "bold formatted" <> " text"
"this is **bold**"
==> "this is " <> bold "bold"
" **bold** text"
==> " " <> bold "bold" <> " text"
"this is **bold** "
==> "this is " <> bold "bold" <> " "
"this is **bold** "
==> "this is " <> bold "bold" <> " "
it "ignored as markdown" do
"this is * unformatted * text"
<==> "this is * unformatted * text"
@@ -81,8 +94,16 @@ textFormat = describe "text format (bold)" do
<==> "this is *unformatted * text"
"this is * unformatted* text"
<==> "this is * unformatted* text"
"this is **unformatted** text"
<==> "this is **unformatted** text"
"this is ** unformatted ** text"
<==> "this is ** unformatted ** text"
"this is **unformatted ** text"
<==> "this is **unformatted ** text"
"this is ** unformatted** text"
<==> "this is ** unformatted** text"
"this is **unformatted text"
<==> "this is **unformatted text"
"this is **unformatted* text"
<==> "this is **unformatted* text"
"this is*unformatted* text"
<==> "this is*unformatted* text"
"this is *unformatted text"