anchor.diff:          unicode -> unicode
       end.
   
  -lform({attribute,Line,Name,Arg}, Opts) ->
  -    lattribute({attribute,Line,Name,Arg}, Opts);
  -lform({function,Line,Name,Arity,Clauses}, Opts) ->
  -    lfunction({function,Line,Name,Arity,Clauses}, Opts);
  +lform({attribute,Anno,Name,Arg}, Opts) ->
  +    lattribute({attribute,Anno,Name,Arg}, Opts);
  +lform({function,Anno,Name,Arity,Clauses}, Opts) ->
  +    lfunction({function,Anno,Name,Arity,Clauses}, Opts);
   %% These are specials to make it easier for the compiler.
   lform({error,_}=E, Opts) ->
       message(E, Opts);
   lform({warning,_}=W, Opts) ->
       message(W, Opts);
  -lform({eof,_Line}, _Opts) ->
  +lform({eof,_Location}, _Opts) ->
       $\n.
   
   message(M, #options{encoding = Encoding}) ->
  
positive.code:     try attrib(optional_callbacks, falist(Falist))
      catch _:_ -> attr(optional_callbacks, [abstract(Falist, Opts)])
      end;
  lattribute(file, {Name,Line}, _Opts) ->
      attr(file, [{string,a0(),Name},{integer,a0(),Line}]);
  lattribute(record, {Name,Is}, Opts) ->
      Nl = [leaf("-record("),{atom,Name},$,],
      [{first,Nl,record_fields(Is, Opts)},$)];
  
negative.code:         end,
      leaf(format(F, [M])).
  
  lattribute({attribute,_Anno,type,Type}, Opts) ->
      [typeattr(type, Type, Opts),leaf(".\n")];
  lattribute({attribute,_Anno,opaque,Type}, Opts) ->
      [typeattr(opaque, Type, Opts),leaf(".\n")];
  lattribute({attribute,_Anno,spec,Arg}, _Opts) ->
      [specattr(spec, Arg),leaf(".\n")];
  lattribute({attribute,_Anno,callback,Arg}, _Opts) ->
      [specattr(callback, Arg),leaf(".\n")];
  lattribute({attribute,_Anno,Name,Arg}, Opts) ->
      [lattribute(Name, Arg, Opts),leaf(".\n")].
  
  lattribute(module, {M,Vs}, _Opts) ->
  