From 9fb01942dfca76b10c07d47b48f3515128395b2d Mon Sep 17 00:00:00 2001 From: Egor Date: Wed, 20 Feb 2019 10:16:51 +0000 Subject: [PATCH] fix carriage return --- lib/auto_linker/parser.ex | 52 +++++++++++++++++---------------------- test/parser_test.exs | 9 +++++++ 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/lib/auto_linker/parser.ex b/lib/auto_linker/parser.ex index 0448cdd..c675bb1 100644 --- 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( + {<>, 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( + {<>, 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 diff --git a/test/parser_test.exs b/test/parser_test.exs index 998b8f4..66bfb97 100644 --- 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 = + "google.com\r\nssss" + + assert parse(text) == expected + end + test "does not link attributes" do text = "Check out google" assert parse(text) == text