anchor.diff:  
   %% @doc Loosely tokenizes and generates parse trees for HTML 4.
   -module(mochiweb_html).
  --export([tokens/1, parse/1, parse_tokens/1, test/0]).
  +-export([tokens/1, parse/1, parse_tokens/1, to_tokens/1, escape/1,
  +         escape_attr/1, to_html/1, test/0]).
   
   % This is a macro to placate syntax highlighters..
   -define(QUOTE, $\").
  +-define(SQUOTE, $\').
   -define(ADV_COL(S, N), S#decoder{column=N+S#decoder.column}).
   -define(INC_COL(S), S#decoder{column=1+S#decoder.column}).
   -define(INC_LINE(S), S#decoder{column=1, line=1+S#decoder.line}).
  
positive.code: tokens(Input) ->
      tokens(Input, #decoder{}, []).
  
  %% @spec test() -> ok
  %% @doc Run tests for mochiweb_html.
  test() ->
      test_destack(),
      test_parse_tokens(),
      ok.
  
  
  %% Internal API
  
  tokens("", _S, Acc) ->
      lists:reverse(Acc);
  
negative.code: find_gt(">" ++ Rest, S, HasSlash) ->
      {Rest, ?INC_COL(S), HasSlash};
  find_gt([$/ | Rest], S, _) ->
      find_gt(Rest, ?INC_COL(S), true);
  find_gt([C | Rest], S, HasSlash) ->
      find_gt(Rest, ?INC_CHAR(S, C), HasSlash).
  
  