Browse Source

fix carriage return

merge-requests/3/head
Egor Kislitsyn 5 years ago
parent
commit
f9f0712b14
2 changed files with 31 additions and 30 deletions
  1. +22
    -30
      lib/auto_linker/parser.ex
  2. +9
    -0
      test/parser_test.exs

+ 22
- 30
lib/auto_linker/parser.ex 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
{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
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 <> "\n", state},
{"", acc <> buffer <> char, state},
handler
)
end


+ 9
- 0
test/parser_test.exs 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


Loading…
Cancel
Save