anchor.diff:  atom_needs_quoting(_) ->
       true.
   
  +unquote_string([$<, $<, $"|T] = Str) ->
  +    case string:substr(T, length(T) - 2) of
  +        "\">>" ->
  +            string:substr(T, 1, length(T) - 3);
  +        _ ->
  +            Str
  +    end;
  +unquote_string([$"|_] = Str) ->
  +    case lists:last(Str) == $" of
  +        true ->
  +            string:strip(Str, both, $");
  +        _ ->
  +            Str
  +    end;
  +unquote_string([$'|_] = Str) ->
  +    case lists:last(Str) == $' of
  +        true ->
  +            string:strip(Str, both, $');
  +        _ ->
  +            Str
  +    end;
  +unquote_string(S) ->
  +    S.
  +
   -ifdef(TEST).
   %%--------------------
   %% The start of a test suite. So far, it only checks for not crashing.
  
positive.code: print(Binary, Max) when is_binary(Binary) ->
      B = binary_to_list(Binary, 1, lists:min([Max, size(Binary)])),
      {L, Len} = alist_start(B, Max-4),
      {["<<", L, ">>"], Len+4};
  
  print(Float, _Max) when is_float(Float) ->
      %% use the same function io_lib:format uses to print floats
  
negative.code:                     {Value, RealLen} = case H of
                          "s" ->
                              % strip off the doublequotes, if applicable
                              Trimmed = unquote_string(lists:flatten(String)),
                              {Trimmed, length(Trimmed)};
                          _ ->
                              {String, Length}
  