     lex(index, string, receiver, {:start, index}, separator)
   end
 
-  defp lex(index, [@newline | tail], receiver, current_token, separator) do
+  defp lex(index, @newline <> tail, receiver, current_token, separator) do
     case current_token do
       {:delimiter, value} -> lex(index, tail, receiver, {:delimiter, value <> @newline}, separator)
       _ ->

    end
  end

  defp lex(index, [@carriage_return | tail], receiver, current_token, separator) do
    case current_token do
      {:delimiter, value} -> lex(index, tail, {:delimiter, receiver, value <> @carriage_return}, separator)
      _ ->

    end
  end

  defp lex(index, @double_quote <> tail, receiver, current_token, separator) do
    emit_token!(current_token, receiver)
    lex(index, tail, receiver, {:double_quote, @double_quote}, separator)
  end

  defp lex(index, << head :: utf8 >> <> tail, receiver, current_token, separator) do
    case << head :: utf8 >> do
      ^separator ->
        emit_token!(current_token, receiver)
        lex(index, tail, receiver, {:separator, separator}, separator)

      _ -> case current_token do
             {:content, value} ->
              lex(index, tail, receiver, {:content, value <> << head :: utf8 >>}, separator)
             _ ->
               emit_token!(current_token, receiver)
               lex(index, tail, receiver, {:content, << head :: utf8 >>}, separator)
           end
    end
  end

  defp lex(index, "", receiver, current_token, _) do
    emit_token!(current_token, receiver)
    emit_token!({:end, index}, receiver)
  end
