diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex
new file mode 100644
index 000000000..5d989bc8c
--- /dev/null
+++ b/lib/pleroma/formatter.ex
@@ -0,0 +1,13 @@
+defmodule Pleroma.Formatter do
+
+ @link_regex ~r/https?:\/\/[\w\.\/?=\-#]+[\w]/
+ def linkify(text) do
+ Regex.replace(@link_regex, text, "\\0")
+ end
+
+ @tag_regex ~r/\#\w+/u
+ def parse_tags(text) do
+ Regex.scan(@tag_regex, text)
+ |> Enum.map(fn (["#" <> tag = full_tag]) -> {full_tag, tag} end)
+ end
+end
diff --git a/test/formatter_test.exs b/test/formatter_test.exs
new file mode 100644
index 000000000..bf09b246f
--- /dev/null
+++ b/test/formatter_test.exs
@@ -0,0 +1,28 @@
+defmodule Pleroma.FormatterTest do
+ alias Pleroma.Formatter
+ use Pleroma.DataCase
+
+ describe ".linkify" do
+ test "turning urls into links" do
+ text = "Hey, check out https://www.youtube.com/watch?v=8Zg1-TufFzY."
+
+ expected = "Hey, check out https://www.youtube.com/watch?v=8Zg1-TufFzY."
+
+ assert Formatter.linkify(text) == expected
+ end
+ end
+
+ describe ".parse_tags" do
+ test "parses tags in the text" do
+ text = "Here's a #test. Maybe these are #working or not. What about #漢字? And #は。"
+ expected = [
+ {"#test", "test"},
+ {"#working", "working"},
+ {"#漢字", "漢字"},
+ {"#は", "は"}
+ ]
+
+ assert Formatter.parse_tags(text) == expected
+ end
+ end
+end