diff --git a/config/config.exs b/config/config.exs
index a1cca06f8..1a9738cff 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -221,7 +221,8 @@
allowed_post_formats: [
"text/plain",
"text/html",
- "text/markdown"
+ "text/markdown",
+ "text/bbcode"
],
mrf_transparency: true,
autofollowed_nicknames: [],
diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex
index 887f878c4..1dfe50b40 100644
--- a/lib/pleroma/web/common_api/utils.ex
+++ b/lib/pleroma/web/common_api/utils.ex
@@ -182,6 +182,18 @@ def format_input(text, "text/plain", options) do
end).()
end
+ @doc """
+ Formatting text as BBCode.
+ """
+ def format_input(text, "text/bbcode", options) do
+ text
+ |> String.replace(~r/\r/, "")
+ |> Formatter.html_escape("text/plain")
+ |> BBCode.to_html()
+ |> (fn {:ok, html} -> html end).()
+ |> Formatter.linkify(options)
+ end
+
@doc """
Formatting text to html.
"""
diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs
index 837a66063..df9955d5d 100644
--- a/test/web/common_api/common_api_utils_test.exs
+++ b/test/web/common_api/common_api_utils_test.exs
@@ -119,6 +119,22 @@ test "works for bare text/markdown" do
assert output == expected
end
+ test "works for bare text/bbcode" do
+ text = "[b]hello world[/b]"
+ expected = "hello world"
+
+ {output, [], []} = Utils.format_input(text, "text/bbcode")
+
+ assert output == expected
+
+ text = "[b]hello world![/b]\n\nsecond paragraph!"
+ expected = "hello world!
second paragraph!"
+
+ {output, [], []} = Utils.format_input(text, "text/bbcode")
+
+ assert output == expected
+ end
+
test "works for text/markdown with mentions" do
{:ok, user} =
UserBuilder.insert(%{nickname: "user__test", ap_id: "http://foo.com/user__test"})