defmodule String do # Receives a string as a list and escapes all occorrences # of char and any string interpolation def escape(other, char) do [char|do_escape(other, char)] end ## Helpers defp do_escape([char|t], char) do [?\\,char|do_escape(t, char)] end defp do_escape([h|t], char) when h == ?# orelse h == ?\b orelse h == ?\d orelse h == ?\e orelse h == ?\f orelse h == ?\n orelse h == ?\r orelse h == ?\\ orelse h == ?\t orelse h == ?\v do [?\\,escape_map(h)|do_escape(t, char)] end defp do_escape([h|t], char) do [h|do_escape(t,char)] end defp do_escape([], char) do [char] end defp escape_map(?#), do: ?# defp escape_map(?\b), do: ?b defp escape_map(?\d), do: ?d defp escape_map(?\e), do: ?e defp escape_map(?\f), do: ?f defp escape_map(?\n), do: ?n defp escape_map(?\r), do: ?r defp escape_map(?\\), do: ?\\ defp escape_map(?\t), do: ?t defp escape_map(?\v), do: ?v end