anchor.diff:  translatable_strings_function(TranslatableStrings) ->
       ?Q("translatable_strings() -> _@TranslatableStrings@.").
   
  -translated_blocks_function(TranslatedBlocks) ->
  -    ?Q("translated_blocks() -> _@TranslatedBlocks@.").
  -
  -variables_function(Variables) ->
  -    ?Q("variables() -> _@vars.",
  -       [{vars, merl:term(lists:usort(Variables))}]).
  -
   custom_forms(Dir, Module, Functions, AstInfo) ->
       Exported = [erl_syntax:arity_qualifier(erl_syntax:atom(source_dir), erl_syntax:integer(0)),
                   erl_syntax:arity_qualifier(erl_syntax:atom(dependencies), erl_syntax:integer(0)),
  
positive.code:                   when length(Errors) == 0 ->
                      Forms = forms(
                                {BodyAst, BodyInfo},
                                {CustomTagsAst, CustomTagsInfo},
                                CheckSum,
                                CustomTagsTreeWalker),
                      compile_forms(Forms, CustomTagsTreeWalker#treewalker.context);
                  {_, #treewalker{ context=Context1 }} ->
  
negative.code:         }=TreeWalker) ->
      MergedInfo = merge_info(BodyInfo, CustomTagsInfo),
  
      Dependencies = MergedInfo#ast_info.dependencies,
      TranslatableStrings = MergedInfo#ast_info.translatable_strings,
      TranslatedBlocks = MergedInfo#ast_info.translated_blocks,
      Variables = lists:usort(MergedInfo#ast_info.var_names),
  
      FinalBodyAst = options_match_ast(TreeWalker) ++ stringify(BodyAst, Context),
  
      erl_syntax:revert_forms(
        erl_syntax:form_list(
          ?Q(["-module('@Module@').",
              "-export([render/0, render/1, render/2, source/0, dependencies/0,",
              "         translatable_strings/0, translated_blocks/0, variables/0]).",
              "render() -> render([], []).",
              "render(Variables) -> render(Variables, []).",
              "render(Variables, RenderOptions) ->",
              "  try render_internal(Variables, RenderOptions) of",
              "    Val -> {ok, Val}",
              "  catch",
              "    Err -> {error, Err}",
              "  end.",
              "source() -> {_@File@, _@CheckSum@}.",
              "dependencies() -> _@Dependencies@.",
              "translatable_strings() -> _@TranslatableStrings@.",
              "translated_blocks() -> _@TranslatedBlocks@.",
              "variables() -> _@Variables@.",
              "render_internal(_Variables, RenderOptions) -> _@FinalBodyAst.",
              "'@_CustomTagsFunctionAst'() -> _."
             ])
         )).
  
  options_match_ast(#treewalker{ context=Context }=TreeWalker) ->
      options_match_ast(Context, TreeWalker);
  