anchor.diff:  is_singleton("link") -> true;
   is_singleton(_) -> false.
   
  -tokenize_data([], S, Acc) ->
  -    {{text, lists:reverse(Acc)}, [], S};
  -tokenize_data(Rest="<" ++ _, S, Acc) ->
  -    {{text, lists:reverse(Acc)}, Rest, S};
  -tokenize_data(Rest="&" ++ _, S, Acc) ->
  -    {{text, lists:reverse(Acc)}, Rest, S};
  -tokenize_data([C | Rest], S, Acc) ->
  -    tokenize_data(Rest, S, [C | Acc]).
  +tokenize_data([], S, Acc, Whitespace) ->
  +    {{data, lists:reverse(Acc), Whitespace}, [], S};
  +tokenize_data(Rest="<" ++ _, S, Acc, Whitespace) ->
  +    {{data, lists:reverse(Acc), Whitespace}, Rest, S};
  +tokenize_data(Rest="&" ++ _, S, Acc, Whitespace) ->
  +    {{data, lists:reverse(Acc), Whitespace}, Rest, S};
  +tokenize_data([C | Rest], S, Acc, Whitespace) when ?IS_WHITESPACE(C) ->
  +    tokenize_data(Rest, S, [C | Acc], Whitespace);
  +tokenize_data([C | Rest], S, Acc, _) ->
  +    tokenize_data(Rest, S, [C | Acc], false).
   
   tokenize_attributes([], S, Acc) ->
       {lists:reverse(Acc), [], S};
  
positive.code:                Unichar ->
                     xmerl_ucs:to_utf8(Unichar)
             end,
      {{text, Data}, Rest, ?INC_COL(S)};
  tokenize_charref([C | Rest], S, Acc) ->
      tokenize_charref(Rest, ?INC_COL(S), [C | Acc]).
  
  
negative.code:     Singleton = HasSlash orelse is_singleton(string:to_lower(Tag)),
      {{start_tag, Tag, Attrs, Singleton}, Rest3, S3};
  tokenize(Rest, S) ->
      tokenize_data(Rest, S, [], true).
  
  %% Internal API
  
  