anchor.diff:      lists:reverse(Acc);
   to_html([{'=', Content} | Rest], Acc) ->
       to_html(Rest, [Content | Acc]);
  +to_html([{pi, Bin} | Rest], Acc) ->
  +    Open = [<<"<?">>,
  +            Bin,
  +            <<"?>">>],
  +    to_html(Rest, [Open | Acc]);
   to_html([{pi, Tag, Attrs} | Rest], Acc) ->
       Open = [<<"<?">>,
               Tag,
  
positive.code:             tokenize_word(Bin, ?INC_COL(S), C);
          <<_:O/binary, C, _/binary>> when not ?IS_WHITESPACE(C) ->
              %% Sanity check for whitespace
              tokenize_literal(Bin, S, [])
      end.
  
  tokenize_word(Bin, S, Quote) ->
  
negative.code:                                               orelse C =:= $=) ->
              tokenize_literal(Bin, ?INC_COL(S), [C | Acc]);
          _ ->
              {iolist_to_binary(string:to_lower(lists:reverse(Acc))), S}
      end.
  
  raw_qgt(Bin, S=#decoder{offset=O}) ->
      raw_qgt(Bin, S, O).
  
  raw_qgt(Bin, S=#decoder{offset=O}, Start) ->
      case Bin of
          <<_:O/binary, "?>", _/binary>> ->
              Len = O - Start,
              <<_:Start/binary, Raw:Len/binary, _/binary>> = Bin,
              {Raw, ?ADV_COL(S, 2)};
          <<_:O/binary, C, _/binary>> ->
              raw_qgt(Bin, ?INC_CHAR(S, C), Start);
          <<_:O/binary>> ->
              <<_:Start/binary, Raw/binary>> = Bin,
              {Raw, S}
      end.
  
  find_qgt(Bin, S=#decoder{offset=O}) ->
      case Bin of
          <<_:O/binary, "?>", _/binary>> ->
              ?ADV_COL(S, 2);
          <<_:O/binary, ">", _/binary>> ->
  			?ADV_COL(S, 1);
          <<_:O/binary, "/>", _/binary>> ->
  			?ADV_COL(S, 2);
          %% tokenize_attributes takes care of this state:
          %% <<_:O/binary, C, _/binary>> ->
          %%     find_qgt(Bin, ?INC_CHAR(S, C));
  