anchor.diff:  %% @equiv compile(parse_binary(Bin), Data)
   -spec render(binary(), data()) -> binary().
   render(Bin, Data) ->
  -    compile(parse_binary(Bin), Data).
  +    compile(Bin, Data, []).
  +
  +%% @equiv compile(parse_binary(Bin), Data)
  +-spec render(binary(), data(), options()) -> binary().
  +render(Bin, Data, Options) ->
  +    compile(parse_binary(Bin), Data, Options).
   
   %% @doc Create a {@link template/0} from a binary.
   -spec parse_binary(binary()) -> template().
  
positive.code: %% @doc {@link compile/2}
  %%
  %% ATTENTION: The result is a list that is inverted.
  -spec compile_impl(Template :: [tag()], data(), Result :: iodata()) -> iodata().
  compile_impl([], _, Result) ->
      Result;
  compile_impl([{n, Key} | T], Map, Result) ->
      compile_impl(T, Map, [escape(to_binary(data_get(binary_to_list(Key), Map, <<>>))) | Result]);
  compile_impl([{'&', Key} | T], Map, Result) ->
      compile_impl(T, Map, [to_binary(data_get(binary_to_list(Key), Map, <<>>)) | Result]);
  compile_impl([{'#', Key, Tags, Source} | T], Map, Result) ->
      Value = data_get(binary_to_list(Key), Map, undefined),
      case check_data_type(Value) of
          true                                        -> compile_impl(T, Map, compile_impl(Tags, Value, Result));
          _ when is_list(Value)                       -> compile_impl(T, Map, lists:foldl(fun(X, Acc) -> compile_impl(Tags, X, Acc) end,
                                                                                          Result, Value));
          _ when Value =:= false; Value =:= undefined -> compile_impl(T, Map, Result);
          _ when is_function(Value, 2)                -> compile_impl(T, Map, [Value(Source, fun(Text) -> render(Text, Map) end) | Result]);
          _                                           -> compile_impl(T, Map, compile_impl(Tags, Map, Result))
      end;
  compile_impl([{'^', Key, Tags} | T], Map, Result) ->
      Value = data_get(binary_to_list(Key), Map, undefined),
      case Value =:= undefined orelse Value =:= [] orelse Value =:= false of
          true  -> compile_impl(T, Map, compile_impl(Tags, Map, Result));
          false -> compile_impl(T, Map, Result)
      end;
  compile_impl([Bin | T], Map, Result) ->
      compile_impl(T, Map, [Bin | Result]).
  
  %% @see parse_binary/1
  -spec parse_binary_impl(state(), Input :: binary()) -> template().
  
negative.code: %%----------------------------------------------------------------------------------------------------------------------
  -export([
           render/2,
           render/3,
           parse_binary/1,
           parse_file/1,
           compile/2,
           compile/3
          ]).
  
  -export_type([
  