anchor.diff:      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};
  
positive.code:     tree(Rest, append_stack_child(norm({Tag, Attrs}), S));
  tree([{start_tag, Tag, Attrs, false} | Rest], S) ->
      tree(Rest, stack(norm({Tag, Attrs}), S));
  tree([T={comment, _Comment} | Rest], S) ->
      tree(Rest, append_stack_child(T, S));
  tree(L=[{data, _Data, _Whitespace} | _], S) ->
  
negative.code:     lists:reverse(Acc);
  to_html([{'=', Content} | Rest], Acc) ->
      to_html(Rest, [Content | Acc]);
  to_html([{pi, Tag, Attrs} | Rest], Acc) ->
      Open = ["<?" ++ Tag,
              attrs_to_html(Attrs, []),
              "?>"],
      to_html(Rest, [Open | Acc]);
  to_html([{comment, Comment} | Rest], Acc) ->
      to_html(Rest, [["<!--" ++ Comment, "-->"] | Acc]);
  to_html([{doctype, Parts} | Rest], Acc) ->
  