anchor.diff:  atom(String, #opts{encoding = utf8}) ->
       io_lib:write_atom(list_to_atom(String)).
   
  --dialyzer({nowarn_function, string_length/1}).
  -string_length(Data) ->
  -    try iolist_size(Data)
  -    catch
  -        _:_ ->
  -            M = string,
  -            F = length,
  -            As = [Data],
  -            try apply(M, F, As)
  -            catch
  -                _:_ ->
  -                    20
  -            end
  -    end.
  -
   %% <!ATTLIST author
   %%   name CDATA #REQUIRED
   %%   email CDATA #IMPLIED
  
positive.code: 
  pp_clause(Pre, Type, Opts) ->
      Types = ot_utype([Type]),
      Atom = lists:duplicate(string_length(Pre), $a),
      Attr = {attribute,0,spec,{{list_to_atom(Atom),0},[Types]}},
      L1 = erl_pp:attribute(erl_parse:new_anno(Attr),
                            [{encoding, Opts#opts.encoding}]),
  
negative.code:     [{tt, Prefix ++ [" = "] ++ t_utype(Type, Opts) ++ Last}].
  
  pp_type(Prefix, Type, Opts) ->
      Atom = list_to_atom(lists:duplicate(string:length(Prefix), $a)),
      Attr = {attribute,0,type,{Atom,ot_utype(Type),[]}},
      L1 = erl_pp:attribute(erl_parse:new_anno(Attr),
                            [{encoding, Opts#opts.encoding}]),
  