Merge branch 'mentions-and-apostrophes' into 'master'

Mentions and apostrophes

See merge request pleroma/elixir-libraries/linkify!41
This commit is contained in:
lain 2021-03-02 12:57:58 +00:00
commit c1aea9357d
3 changed files with 24 additions and 2 deletions

View file

@ -5,6 +5,7 @@
### Fixed
- Incorrect detection of IPv4 addresses causing random numbers (e.g., $123.45) to get linked
- Inability to link mentions with a trailing apostrophe. e.g., @user@example's
## 0.4.0 - 2020-11-24

View file

@ -17,6 +17,13 @@ defmodule Linkify.Parser do
@delimiters ~r/[,.;:>?!]*$/
@en_apostrophes [
"'",
"'s",
"'ll",
"'d"
]
@prefix_extra [
"magnet:?",
"dweb://",
@ -209,6 +216,12 @@ defmodule Linkify.Parser do
defp strip_punctuation(buffer), do: String.replace(buffer, @delimiters, "")
defp strip_en_apostrophes(buffer) do
Enum.reduce(@en_apostrophes, buffer, fn abbrev, buf ->
String.replace_suffix(buf, abbrev, "")
end)
end
def url?(buffer, opts) do
valid_url?(buffer) && Regex.match?(@match_url, buffer) && valid_tld?(buffer, opts)
end
@ -367,6 +380,7 @@ defmodule Linkify.Parser do
buffer
|> String.split("<")
|> List.first()
|> strip_en_apostrophes()
|> strip_punctuation()
|> strip_parens()

View file

@ -383,10 +383,17 @@ defmodule LinkifyTest do
new_window: true
) == expected
expected =
"That's <a href=\"https://example.com/user/user@example.com\" target=\"_blank\">@user@example.com</a>'s server"
text = "That's @user@example.com's server"
assert Linkify.link(text, mention: true, mention_prefix: "https://example.com/user/") ==
text
assert Linkify.link(text,
mention: true,
mention_prefix: "https://example.com/user/",
new_window: true
) ==
expected
end
test "mentions with no word-separation before them" do