diff options
| author | Maksim Pechnikov <parallel588@gmail.com> | 2018-12-14 12:41:55 +0300 | 
|---|---|---|
| committer | Maksim Pechnikov <parallel588@gmail.com> | 2018-12-14 16:03:58 +0300 | 
| commit | baead4ea4b84ab1190b87a2dc73cdc4afaa6ebc6 (patch) | |
| tree | 9f602b5abff3daafedb34bf50c4967a6503e4511 /lib | |
| parent | 91236c60c7aa266c1e874ebdd2aa44becfc6709b (diff) | |
| download | pleroma-baead4ea4b84ab1190b87a2dc73cdc4afaa6ebc6.tar.gz pleroma-baead4ea4b84ab1190b87a2dc73cdc4afaa6ebc6.zip | |
fix markdown formatting
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/formatter.ex | 14 | ||||
| -rw-r--r-- | lib/pleroma/html.ex | 10 | ||||
| -rw-r--r-- | lib/pleroma/web/common_api/utils.ex | 10 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/views/activity_view.ex | 3 | 
4 files changed, 28 insertions, 9 deletions
| diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 133683794..b6079551c 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -5,6 +5,8 @@ defmodule Pleroma.Formatter do    alias Pleroma.Emoji    @tag_regex ~r/\#\w+/u +  @mardown_characters_regex ~r/(`|\*|_|{|}|[|]|\(|\)|#|\+|-|\.|!)/ +    def parse_tags(text, data \\ %{}) do      Regex.scan(@tag_regex, text)      |> Enum.map(fn ["#" <> tag = full_tag] -> {full_tag, String.downcase(tag)} end) @@ -76,6 +78,18 @@ defmodule Pleroma.Formatter do      |> Enum.join("")    end +  @doc """ +  Escapes a special characters in mention names. +  """ +  @spec mentions_escape(String.t(), list({String.t(), any()})) :: String.t() +  def mentions_escape(text, mentions) do +    mentions +    |> Enum.reduce(text, fn {name, _}, acc -> +      escape_name = String.replace(name, @mardown_characters_regex, "\\\\\\1") +      String.replace(acc, name, escape_name) +    end) +  end +    @doc "changes scheme:... urls to html links"    def add_links({subs, text}) do      links = diff --git a/lib/pleroma/html.ex b/lib/pleroma/html.ex index 8a0333461..583f05aeb 100644 --- a/lib/pleroma/html.ex +++ b/lib/pleroma/html.ex @@ -17,15 +17,9 @@ defmodule Pleroma.HTML do      end)    end -  def filter_tags(html, scrubber) do -    html |> Scrubber.scrub(scrubber) -  end - +  def filter_tags(html, scrubber), do: Scrubber.scrub(html, scrubber)    def filter_tags(html), do: filter_tags(html, nil) - -  def strip_tags(html) do -    html |> Scrubber.scrub(Scrubber.StripTags) -  end +  def strip_tags(html), do: Scrubber.scrub(html, Scrubber.StripTags)  end  defmodule Pleroma.HTML.Scrubber.TwitterText do diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index ce0926b99..142283684 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -112,6 +112,9 @@ defmodule Pleroma.Web.CommonAPI.Utils do      Enum.join([text | attachment_text], "<br>")    end +  @doc """ +  Formatting text to plain text. +  """    def format_input(text, mentions, tags, "text/plain") do      text      |> Formatter.html_escape("text/plain") @@ -123,6 +126,9 @@ defmodule Pleroma.Web.CommonAPI.Utils do      |> Formatter.finalize()    end +  @doc """ +  Formatting text to html. +  """    def format_input(text, mentions, _tags, "text/html") do      text      |> Formatter.html_escape("text/html") @@ -132,8 +138,12 @@ defmodule Pleroma.Web.CommonAPI.Utils do      |> Formatter.finalize()    end +  @doc """ +  Formatting text to markdown. +  """    def format_input(text, mentions, tags, "text/markdown") do      text +    |> Formatter.mentions_escape(mentions)      |> Earmark.as_html!()      |> Formatter.html_escape("text/html")      |> String.replace(~r/\r?\n/, "") diff --git a/lib/pleroma/web/twitter_api/views/activity_view.ex b/lib/pleroma/web/twitter_api/views/activity_view.ex index e5caed28f..433c3b141 100644 --- a/lib/pleroma/web/twitter_api/views/activity_view.ex +++ b/lib/pleroma/web/twitter_api/views/activity_view.ex @@ -239,7 +239,8 @@ defmodule Pleroma.Web.TwitterAPI.ActivityView do      {summary, content} = render_content(object)      html = -      HTML.filter_tags(content, User.html_filter_policy(opts[:for])) +      content +      |> HTML.filter_tags(User.html_filter_policy(opts[:for]))        |> Formatter.emojify(object["emoji"])      reply_parent = Activity.get_in_reply_to_activity(activity) | 
