anchor.diff:      {lists:reverse(Acc), [], S};
   tokenize_attributes(Rest=">" ++ _, S, Acc) ->
       {lists:reverse(Acc), Rest, S};
  +tokenize_attributes(Rest="?>" ++ _, S, Acc) ->
  +    {lists:reverse(Acc), Rest, S};
   tokenize_attributes(Rest="/" ++ _, S, Acc) ->
       {lists:reverse(Acc), Rest, S};
   tokenize_attributes([C | Rest], S, Acc) when ?IS_WHITESPACE(C) ->
  
positive.code:     tokenize_doctype(Rest, ?ADV_COL(S, 10), []);
  tokenize("<![CDATA[" ++ Rest, S) ->
      tokenize_cdata(Rest, ?ADV_COL(S, 9), []);
  tokenize("&" ++ Rest, S) ->
      tokenize_charref(Rest, ?INC_COL(S), []);
  tokenize("</" ++ Rest, S) ->
  
negative.code:     skip_whitespace(Rest, ?INC_CHAR(S, C));
  skip_whitespace(Rest, S) ->
      {Rest, S}.
  
  find_qgt([], S) ->
      {[], S};
  find_qgt("?>" ++ Rest, S) ->
      {Rest, ?ADV_COL(S, 2)};
  find_qgt([C | Rest], S) ->
      find_qgt(Rest, ?INC_CHAR(S, C)).
  
  find_gt([], S, HasSlash) ->
      {[], S, HasSlash};
  