anchor.diff:          tokens(<<"<foo bar=baz wibble='wibble' alice=bob/>">>),
       [{comment, <<"[if lt IE 7]>\n<style type=\"text/css\">\n.no_ie { display: none; }\n</style>\n<![endif]">>}] =
           tokens(<<"<!--[if lt IE 7]>\n<style type=\"text/css\">\n.no_ie { display: none; }\n</style>\n<![endif]-->">>),
  +    [{start_tag, <<"script">>, [{<<"type">>, <<"text/javascript">>}], false},
  +     {data, <<" A= B <= C ">>, false},
  +     {end_tag, <<"script">>}] =
  +        tokens(<<"<script type=\"text/javascript\"> A= B <= C </script>">>),
  +    [{start_tag, <<"textarea">>, [], false},
  +     {data, <<"<html></body>">>, false},
  +     {end_tag, <<"textarea">>}] =
  +        tokens(<<"<textarea><html></body></textarea>">>),
       ok.
   
   tokens(B, S=#decoder{offset=O}, Acc) ->
  
positive.code: -define(IS_LITERAL_SAFE(C),
          ((C >= $A andalso C =< $Z) orelse (C >= $a andalso C =< $z)
           orelse (C >= $0 andalso C =< $9))).
                                  
  -record(decoder, {line=1,
                    column=1,
                    offset=0}).
  
negative.code:             %% Unfurl up to the tag, then accumulate it
              [{T0, A0, [destack(Pre ++ [T]) | Acc0]} | Post]
      end.
  
  destack([{Tag, Attrs, Acc}]) ->
      {Tag, Attrs, lists:reverse(Acc)};
  destack([{T1, A1, Acc1}, {T0, A0, Acc0} | Rest]) ->
  