anchor.diff:  to_html([{end_tag, Tag} | Rest], Acc) ->
       to_html(Rest, [["</" ++ Tag, ">"] | Acc]).
   
  +doctype_to_html([], Acc) ->
  +    lists:reverse(Acc);
  +doctype_to_html([Word | Rest], Acc) ->
  +    case lists:all(fun (C) -> ?IS_LITERAL_SAFE(C) end, Word) of
  +        true ->
  +            doctype_to_html(Rest, [" " ++ Word | Acc]);
  +        false ->
  +            doctype_to_html(Rest, [[" \"" ++ escape_attr(Word), ?QUOTE] | Acc])
  +    end.
  +
   attrs_to_html([], Acc) ->
       lists:reverse(Acc);
   attrs_to_html([{K, V} | Rest], Acc) ->
  
positive.code: 
  %% @spec to_tokens(html_node()) -> [html_token()]
  %% @doc Convert a html_node() tree to a list of tokens.
  to_tokens({Tag0, Attrs, Acc}) ->
      Tag = to_tag(Tag0),
      to_tokens([{Tag, Acc}], [{start_tag, Tag, Attrs, is_singleton(Tag)}]).
  
  %% @spec to_html([html_token()] | html_node()) -> iolist()
  %% @doc Convert a list of html_token() to a HTML document.
  to_html(Node={_Tag, _Attrs, _Acc}) ->
      to_html(to_tokens(Node));
  to_html(Tokens) when is_list(Tokens) ->
      to_html(Tokens, []).
  
negative.code:                       [{start_tag, T1, A1, false} | Acc])
      end;
  to_tokens([{Tag0, [L | R1]} | Rest], Acc) when is_list(L) ->
      %% List text
      Tag = to_tag(Tag0),
      to_tokens([{Tag, R1} | Rest], [{data, L, false} | Acc]);
  to_tokens([{Tag0, [B | R1]} | Rest], Acc) when is_binary(B) ->
      %% Binary text
      Tag = to_tag(Tag0),
      to_tokens([{Tag, R1} | Rest], [{data, binary_to_list(B), false} | Acc]).
  
  