Add Formatter.
authorRoger Braun <roger@rogerbraun.net>
Wed, 17 May 2017 16:00:09 +0000 (18:00 +0200)
committerRoger Braun <roger@rogerbraun.net>
Wed, 17 May 2017 16:00:09 +0000 (18:00 +0200)
lib/pleroma/formatter.ex [new file with mode: 0644]
test/formatter_test.exs [new file with mode: 0644]

diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex
new file mode 100644 (file)
index 0000000..5d989bc
--- /dev/null
@@ -0,0 +1,13 @@
+defmodule Pleroma.Formatter do
+
+  @link_regex ~r/https?:\/\/[\w\.\/?=\-#]+[\w]/
+  def linkify(text) do
+    Regex.replace(@link_regex, text, "<a href='\\0'>\\0</a>")
+  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 (file)
index 0000000..bf09b24
--- /dev/null
@@ -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 <a href='https://www.youtube.com/watch?v=8Zg1-TufFzY'>https://www.youtube.com/watch?v=8Zg1-TufFzY</a>."
+
+      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