X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Femoji.ex;h=933f4275af1d6cec7625b52ad00c9491b620798e;hb=e124a109c1897529b4b9eae563f550b9fb5dfb50;hp=9e1858ae73308ae333b293af7a999e07a8ceaaa2;hpb=abefbcec647b839f0ea0c5253b16149d0d576add;p=akkoma diff --git a/lib/pleroma/emoji.ex b/lib/pleroma/emoji.ex index 9e1858ae7..933f4275a 100644 --- a/lib/pleroma/emoji.ex +++ b/lib/pleroma/emoji.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Emoji do """ use GenServer + alias Pleroma.Emoji.Combinations alias Pleroma.Emoji.Loader require Logger @@ -20,6 +21,7 @@ defmodule Pleroma.Emoji do :named_table, {:read_concurrency, true} ] + @emoji_regex ~r/:[A-Za-z0-9_-]+(@.+)?:/ defstruct [:code, :file, :tags, :safe_code, :safe_file] @@ -124,7 +126,7 @@ defmodule Pleroma.Emoji do |> String.split("\n") |> Enum.filter(fn line -> line != "" and not String.starts_with?(line, "#") and - String.contains?(line, "qualified") + String.contains?(line, "fully-qualified") end) |> Enum.map(fn line -> line @@ -159,7 +161,11 @@ defmodule Pleroma.Emoji do if is_unicode_emoji?(name) do name else - ":#{name}:" + if String.starts_with?(name, ":") do + name + else + ":#{name}:" + end end end @@ -182,4 +188,25 @@ defmodule Pleroma.Emoji do end def emoji_url(_), do: nil + + def emoji_name_with_instance(name, url) do + url = url |> URI.parse() |> Map.get(:host) + "#{name}@#{url}" + end + + emoji_qualification_map = + emojis + |> Enum.filter(&String.contains?(&1, "\uFE0F")) + |> Combinations.variate_emoji_qualification() + + for {qualified, unqualified_list} <- emoji_qualification_map do + for unqualified <- unqualified_list do + def fully_qualify_emoji(unquote(unqualified)), do: unquote(qualified) + end + end + + def fully_qualify_emoji(emoji), do: emoji + + def matches_shortcode?(nil), do: false + def matches_shortcode?(s), do: Regex.match?(@emoji_regex, s) end