logo

auto_linker

AutoLinker-shim, based on https://git.pleroma.social/pleroma/auto_linker
commit: ae032126cdcda07dcf8eebb50de3190536cc3fc4
parent: 01de0bccc2ad262c5f7833fa06b08d31cb91720b
Author: Egor <egor@kislitsyn.com>
Date:   Wed, 20 Feb 2019 10:16:51 +0000

Merge branch 'fix/carriage-return' into 'master'

fix carriage return

See merge request pleroma/auto_linker!3

Diffstat:

Mlib/auto_linker/parser.ex52++++++++++++++++++++++------------------------------
Mtest/parser_test.exs9+++++++++
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