fix carriage return

This commit is contained in:
Egor 2019-02-20 10:16:51 +00:00 committed by Egor Kislitsyn
parent 583f8565eb
commit 9fb01942df
2 changed files with 31 additions and 30 deletions

View file

@ -205,23 +205,20 @@ defmodule AutoLinker.Parser do
handler
)
defp do_parse({" " <> text, user_acc}, opts, {buffer, acc, {:open, level}}, handler),
do:
do_parse(
{text, user_acc},
opts,
{"", acc <> buffer <> " ", {:attrs, level}},
handler
)
defp do_parse({"\n" <> text, user_acc}, opts, {buffer, acc, {:open, level}}, handler),
do:
do_parse(
{text, user_acc},
opts,
{"", acc <> buffer <> "\n", {:attrs, level}},
handler
)
defp do_parse(
{<<char::bytes-size(1), text::binary>>, user_acc},
opts,
{buffer, acc, {:open, level}},
handler
)
when char in [" ", "\r", "\n"] do
do_parse(
{text, user_acc},
opts,
{"", acc <> buffer <> char, {:attrs, level}},
handler
)
end
# default cases where state is not important
defp do_parse(
@ -232,24 +229,19 @@ defmodule AutoLinker.Parser do
),
do: do_parse({text, user_acc}, opts, {buffer <> " ", acc, state}, handler)
defp do_parse({" " <> text, user_acc}, opts, {buffer, acc, state}, handler) do
defp do_parse(
{<<char::bytes-size(1), text::binary>>, user_acc},
opts,
{buffer, acc, state},
handler
)
when char in [" ", "\r", "\n"] do
{buffer, user_acc} = run_handler(handler, buffer, opts, user_acc)
do_parse(
{text, user_acc},
opts,
{"", acc <> buffer <> " ", state},
handler
)
end
defp do_parse({"\n" <> text, user_acc}, opts, {buffer, acc, state}, handler) do
{buffer, user_acc} = run_handler(handler, buffer, opts, user_acc)
do_parse(
{text, user_acc},
opts,
{"", acc <> buffer <> "\n", state},
{"", acc <> buffer <> char, state},
handler
)
end

View file

@ -51,6 +51,15 @@ defmodule AutoLinker.ParserTest do
end
describe "parse" do
test "handle line breakes" do
text = "google.com\r\nssss"
expected =
"<a href=\"http://google.com\" class=\"auto-linker\" target=\"_blank\" rel=\"noopener noreferrer\">google.com</a>\r\nssss"
assert parse(text) == expected
end
test "does not link attributes" do
text = "Check out <a href='google.com'>google</a>"
assert parse(text) == text