anchor.diff:  
   % Starting an attribute
   line_tokens([?T_ATTR_ST | T], _, [], AllTAcc, _State) ->
  -  line_tokens(T, ?T_ATTR_ST, [], [{start_attrib, ?LN} | AllTAcc], {true});
  -line_tokens([?T_ATTR_ST | T], $ , CurrTAcc, AllTAcc, _State) ->
  -  line_tokens(T, ?T_ATTR_ST, [], ?FLUSH({start_attrib, ?LN}), {true});
  +  %line_tokens(T, ?T_ATTR_ST, [], [{start_attrib, ?LN} | AllTAcc], {true});
  +  line_tokens(T, ?T_ATTR_ST, [], AllTAcc, {true});
  +line_tokens([?T_ATTR_ST | T], $ , CurrTAcc, AllTAcc, State) ->
  +  %line_tokens(T, ?T_ATTR_ST, [], ?FLUSH({start_attrib, ?LN}), {true});
  +  line_tokens(T, ?T_ATTR_ST, [], ?SFLUSH, {true});
   
   % Parent separator
  -line_tokens([?T_PAR_SEP | T], _, CurrTAcc, AllTAcc, {false}) ->
  -  line_tokens(T, ?T_PAR_SEP, [], ?FLUSH({parent_sep, ?LN}), {false});
  +line_tokens([?T_PAR_SEP | T], _, CurrTAcc, AllTAcc, {false} = State) ->
  +  %line_tokens(T, ?T_PAR_SEP, [], ?FLUSH({parent_sep, ?LN}), {false});
  +  line_tokens(T, ?T_PAR_SEP, [], ?SFLUSH, {false});
   
   % Whitespace.  Flush token.
   line_tokens([$\n | T], _, CurrTAcc, AllTAcc, State) ->
     line_tokens(T, $\n, [], ?SFLUSH, State);
  -line_tokens([H | T], _Last, CurrTAcc, AllTAcc, {false}) when
  -    ((H >= $\x{0009}) and (H =< $\x{000D}))
  -    or (H == $\x{0020}) or (H == $\x{00A0}) ->
  -  line_tokens(T, H, [], ?SFLUSH, {false});
  +%line_tokens([H | T], _Last, CurrTAcc, AllTAcc, {false}) when
  +%    ((H >= $\x{0009}) and (H =< $\x{000D}))
  +%    or (H == $\x{0020}) or (H == $\x{00A0}) ->
  +%  line_tokens(T, H, [], ?SFLUSH, {false});
  +
  +% Ignore consecutive spaces
  +line_tokens([$  | T], $ , CurrTAcc, AllTAcc, State) ->
  +  line_tokens(T, $ , CurrTAcc, AllTAcc, State);
  +line_tokens([$  | T], _, [], AllTAcc, State) ->
  +  line_tokens(T, $ , [], AllTAcc, State);
   
   line_tokens([H | T], _Last, CurrTAcc, AllTAcc, State) ->
     line_tokens(T, H, [H | CurrTAcc], AllTAcc, State).
  
positive.code: do_dedent(Dents, [H | _] = IStack, TokenAcc) when Dents == H ->
    {IStack, TokenAcc};
  do_dedent(Dents, [H | T], TokenAcc) when Dents < H ->
    do_dedent(Dents, T, [{dedent, ?LN} | TokenAcc]).
  
  
  line_tokens(Line, State) ->
    line_tokens(Line, none, [], [], State).
    %{[{general, Line}], State}.
  
  % Line is finished- move current-token to all, and return.
  % Reset in-attribute state
  line_tokens([], _, CurrTAcc, AllTAcc, _State) ->
    {?SFLUSH, {false}};
  
  % Escaped character.  Pops the escape char off current token, adds this
  
negative.code: line_tokens([?T_STR_MLT_ST_2 | T], ?T_STR_MLT_ST_1,
      [_ | CurrTAcc], AllTAcc, State) ->
    {Str, Remaining} = pull_inner(T, fun line_pull_in_str/1),
    line_tokens(Remaining, string, [], ?FLUSH(Str), State);
  
  % Inline comment - pretend we're at the end of the string
  line_tokens([?T_IGN_INL_2 |_], ?T_IGN_INL_1, [_ | CurrTAcc], AllTAcc, State) ->
  