anchor.diff:      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) ->
  
positive.code:     skip_whitespace(Rest, ?INC_CHAR(S, C));
  skip_whitespace(Rest, S) ->
      {Rest, S}.
  
  find_gt([], S, HasSlash) ->
      {[], S, HasSlash};
  
negative.code:     tokenize_doctype(Rest, ?ADV_COL(S, 10), []);
  tokenize("<![CDATA[" ++ Rest, S) ->
      tokenize_cdata(Rest, ?ADV_COL(S, 9), []);
  tokenize("<?" ++ Rest, S) ->
      {Tag, Rest1, S1} = tokenize_literal(Rest, ?ADV_COL(S, 2), []),
      {Attrs, Rest2, S2} = tokenize_attributes(Rest1, S1, []),
      {Rest3, S3} = find_qgt(Rest2, S2),
      {{pi, Tag, Attrs}, Rest3, S3};
  tokenize("&" ++ Rest, S) ->
      tokenize_charref(Rest, ?INC_COL(S), []);
  tokenize("</" ++ Rest, S) ->
  