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