anchor.diff:      get_search_paths/1,
       str/1,
       call_special/3,
  -    call_special/4,
  -    render_string/2,
  -    render_string/3
  +    call_special/4
     ]).
   
   -define(OPT_ENV(Desc),
  
positive.code:       _ -> Options
      end,
    {ok, Bin} = file:read_file(InFile),
    compile_string(binary_to_list(Bin), Options2).
  
  compile_stream(Stream) -> compile_stream(Stream, []).
  
  compile_stream(Stream, Options) ->
    Str = io:get_chars(Stream, "", 1024000),
    compile_string(Str, Options).
  
  compile_string(Str) -> compile_string(Str, []).
  
  compile_string(Str, Options) ->
    Options2 = other_options(Options),
    AST = zml_indent:tokenize_string(Str), % TODO: pass options here
    AST2 = run_specialized_handlers(AST, Options2),
    Template = translate_ast_item(AST2, []),
    zml_render:render(Template,
      proplists:get_value(data, Options2, fake)).
  
  render_string(Str, Data) -> render_string(Str, Data, []).
  
  render_string(Str, Data, Options) ->
    compile_string(Str, [{data, Data} | Options]).
  
  other_options(Options) ->
    case ?OPT_ENV(zml_zss_libs) of
  
negative.code: 
  compile_files() -> compile_files([]).
  
  compile_files([]) ->
    Template = zml:template_stream(standard_io),
    io:format("~s~n", [zml:render(Template)]);
  
  compile_files(FLS) ->
    lists:foreach(fun(FName) ->
      % TODO: take output path from the options.
      FNameOut = FName ++ ".html",
      io:format("~s --> ~s.html~n", [FName, FNameOut]),
      Template = zml:template_file(FName),
      ok = file:write_file(FNameOut, zml:render(Template))
    end, FLS).
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  template_file(InFile) -> template_file(InFile, []).
  
  template_file(InFile, Options) ->
    SourceFName = filename:absname(InFile),
    Options2 =
      case proplists:lookup(source_filename, Options) of
  