anchor.diff:  unescape_map(E)  -> E.
   
   %% Strings
  -
   handle_string(T, Line, Column, Term, Scope, Tokens) ->
     case scan_string(Line, Column, T, Term) of
       {ok, NewLine, NewColumn, Bin, Rest} ->
         case unescape_token(Bin) of
           {ok, Unescaped} ->
  -          Token = {string_type(Term), build_meta(Line, Column-1), Unescaped},
  +          Token = {string_type(Term), build_meta(Line, Column-length(Term)), Unescaped},
             scan(Rest, NewLine, NewColumn, Scope, [Token|Tokens]);
           {error, ErrorDescription} ->
  -          {error, {{Line, Column}, ?MODULE, ErrorDescription}, [Term|T], lists:reverse(Tokens)}
  +          {error, {{Line, Column}, ?MODULE, ErrorDescription}, Term ++ T, lists:reverse(Tokens)}
         end;
       {error, Location, _} ->
         {error, {Location, ?MODULE, {missing_terminator, Term, Term, Line}}, T, lists:reverse(Tokens)}
  
positive.code: 
  %% Strings
  
  scan([$"|T], Line, Column, Scope, Tokens) ->
    handle_string(T, Line, Column + 1, $", Scope, Tokens);
  scan([$'|T], Line, Column, Scope, Tokens) ->
    handle_string(T, Line, Column + 1, $', Scope, Tokens);
  
  %% Atoms
  
  
negative.code: %% Error
  
  format_error({missing_terminator, Close, Open, OpenLine}) ->
    io_lib:format("missing terminator: ~ts (for \"~ts\" opening at line ~B)", [Close, Open, OpenLine]);
  format_error({invalid_n_base_char, Char, Base, Line}) ->
    io_lib:format("invalid char: ~tc for ~B-base number at line ~B", [Char, Base, Line]);
  format_error({invalid_eof, escape}) ->
  