anchor.diff:                 Unichar ->
                      xmerl_ucs:to_utf8(Unichar)
              end,
  -    {{data, Data, false}, Rest, ?INC_COL(S)};
  +    {{data, list_to_binary(Data), false}, Rest, ?INC_COL(S)};
   tokenize_charref([C | Rest], S, Acc) ->
       tokenize_charref(Rest, ?INC_COL(S), [C | Acc]).
   
  
positive.code:    <link rel=\"shortcut icon\" href=\"/static/images/favicon.ico\" type=\"image/x-icon\">
   </head>
   <body id=\"home\" class=\"tundra\"><![CDATA[&lt;<this<!-- is -->CDATA>&gt;]]></body>
  </html>",
      Expect = {"html", [],
                [{"head", [],
                  [{"meta",
                    [{"http-equiv","Content-Type"},
                     {"content","text/html; charset=UTF-8"}],
                    []},
                   {"title",[],["Foo"]},
                   {"link",
                    [{"rel","stylesheet"},
                     {"type","text/css"},
                     {"href","/static/rel/dojo/resources/dojo.css"},
                     {"media","screen"}],
                    []},
                   {"link",
                    [{"rel","stylesheet"},
                     {"type","text/css"},
                     {"href","/static/foo.css"},
                     {"media","screen"}],
                    []},
                   {comment,"[if lt IE 7]>\n   <style type=\"text/css\">\n     .no_ie { display: none; }\n   </style>\n   <![endif]"},
                   {"link",
                    [{"rel","icon"},
                     {"href","/static/images/favicon.ico"},
                     {"type","image/x-icon"}],
                    []},
                   {"link",
                    [{"rel","shortcut icon"},
                     {"href","/static/images/favicon.ico"},
                     {"type","image/x-icon"}],
                    []}]},
                 {"body",
                  [{"id","home"},
                   {"class","tundra"}],
                  ["&lt;<this<!-- is -->CDATA>&gt;"]}]},
      Expect = parse(D0),
      ok.
  
  test_parse_tokens() ->
      D0 = [{doctype,["HTML","PUBLIC","-//W3C//DTD HTML 4.01 Transitional//EN"]},
            {data,"\n",true},
            {start_tag,"html",[],false}],
      {"html", [], []} = parse_tokens(D0),
      D1 = D0 ++ [{end_tag, "html"}],
      {"html", [], []} = parse_tokens(D1),
      D2 = D0 ++ [{start_tag, "body", [], false}],
      {"html", [], [{"body", [], []}]} = parse_tokens(D2),
      D3 = D0 ++ [{start_tag, "head", [], false},
                  {end_tag, "head"},
                  {start_tag, "body", [], false}],
      {"html", [], [{"head", [], []}, {"body", [], []}]} = parse_tokens(D3),
      D4 = D3 ++ [{data,"\n",true},
                  {start_tag,"div",[{"class","a"}],false},
                  {start_tag,"a",[{"name","#anchor"}],false},
                  {end_tag,"a"},
                  {end_tag, "div"},
                  {start_tag,"div",[{"class","b"}],false},
                  {start_tag,"div",[{"class","c"}],false},
                  {end_tag, "div"},
                  {end_tag, "div"}],
      {"html", [],
       [{"head", [], []},
        {"body", [],
         [{"div", [{"class", "a"}], [{"a", [{"name", "#anchor"}], []}]},
          {"div", [{"class", "b"}], [{"div", [{"class", "c"}], []}]}
         ]}]} = parse_tokens(D4),
      D5 = [{start_tag,"html",[],false},
            {data,"\n",true},
            {data,"boo",false},
            {data,"hoo",false},
            {data,"\n",true},
            {end_tag,"html"}],
      {"html", [], ["\nboohoo\n"]} = parse_tokens(D5),
      D6 = [{start_tag,"html",[],false},
            {data,"\n",true},
            {data,"\n",true},
            {end_tag,"html"}],
      {"html", [], []} = parse_tokens(D6),
      D7 = [{start_tag,"html",[],false},
            {start_tag,"ul",[],false},
            {start_tag,"li",[],false},
            {data,"word",false},
            {start_tag,"li",[],false},
            {data,"up",false},
            {end_tag,"li"},
            {start_tag,"li",[],false},
            {data,"fdsa",false},
            {start_tag,"br",[],true},
            {data,"asdf",false},
            {end_tag,"ul"},
            {end_tag,"html"}],
      {"html", [],
       [{"ul", [],
         [{"li", [], ["word"]},
          {"li", [], ["up"]},
          {"li", [], ["fdsa",{"br", [], []}, "asdf"]}]}]} = parse_tokens(D7),
      ok.
  
  tree_data([{data, Data, Whitespace} | Rest], AllWhitespace, Acc) ->
      tree_data(Rest, (Whitespace andalso AllWhitespace), [Data | Acc]);
  tree_data(Rest, AllWhitespace, Acc) ->
      {lists:append(lists:reverse(Acc)), AllWhitespace, Rest}.
  
  tree([], Stack) ->
      {destack(Stack), []};
  
negative.code:     %% Native {"p", [{"class", "foo"}], ["content"]}
      Tag = to_tag(Tag0),
      T1 = to_tag(T0),
      case is_singleton(norm(T1)) of
          true ->
              to_tokens([{Tag, R1} | Rest], [{start_tag, T1, A1, true} | Acc]);
          false ->
  