anchor.diff:  push_till([], _) -> [].
   
   parse(Str) ->
  +    parse(Str, erlamsa_utils:binarish(Str)).
  +
  +parse(Str, false) ->
       Tokens = tokenize(Str),
       %io:format("~w~n", [Tokens]),
  -    build_ast2(Tokens, [], [], {0, 0}).
  +    build_ast2(Tokens, [], [], {0, 0});
  +parse(_Str, true) ->
  +    throw(incorrect_sgml).
   
   % list(token()), list(ast_elem()), list(strings) -> atom(), list(ast_elem()), list(ast_elem(),
   %		{non_neg_int(), non_neg_int()})
  
positive.code: tz({end_tag,Tag},?D(X,S)) when ?ev(X)     -> {{end_tag,Tag,'>'},ws(S)};
  tz({end_tag,Tag,'>'},?m(">",Str))         -> {text,Str,{close,Tag,string:to_lower(Tag)}};
  tz({end_tag,Tag},?d(X,Str))               -> {{end_tag,Tag++[X]},Str};
  tz({end_tag,_},_)              			  -> throw(incorrect_sgml);
  
  tz({attr,"",{Tag,As}},?D(X,S))when ?ev(X) -> {{etag,Tag,As},S};
  
negative.code:                 NewBinStr =:= H ->
                  {fun sgml_mutate/2, Ll, Meta, -1};
              true ->
                  {fun sgml_mutate/2, [NewBinStr | T], [{Name, 1} | Meta], 
                   D + trunc(size(NewBinStr)/(?AVG_BLOCK_SIZE*10))} %% limiting next rounds based on a size
              end
      catch
          incorrect_sgml ->
  