From dcfd494e97bfecf62a6a31514ec69f374b41c870 Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Wed, 17 May 2017 18:00:09 +0200
Subject: [PATCH] Add Formatter.

---
 lib/pleroma/formatter.ex | 13 +++++++++++++
 test/formatter_test.exs  | 28 ++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+)
 create mode 100644 lib/pleroma/formatter.ex
 create mode 100644 test/formatter_test.exs

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, "<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
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 <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