commit: 23bb7d68f04ed41ea155ed83e74ba5728bf7c239
parent 01de0bccc2ad262c5f7833fa06b08d31cb91720b
Author: Egor <egor@kislitsyn.com>
Date: Wed, 20 Feb 2019 10:16:51 +0000
fix carriage return
Diffstat:
2 files changed, 31 insertions(+), 30 deletions(-)
diff --git a/lib/auto_linker/parser.ex b/lib/auto_linker/parser.ex
@@ -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
diff --git a/test/parser_test.exs b/test/parser_test.exs
@@ -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