anchor.diff:  document(<<>>, Pos, Parsed) ->
       {<<>>, Pos, Parsed};
   document(<<"<?php",Rest/binary>>, Pos, Parsed) ->
  -    code(Rest, add_pos(Pos,5), Parsed);
  +    {Rest0,Pos0,NParsed} = code(Rest, add_pos(Pos,5), Parsed),
  +    {Rest0,Pos0,[add_line(#eval{statements=NParsed},Pos)]};
   document(<<"<?=",Rest/binary>>, Pos, Parsed) ->
       code_value(Rest, code_value_level(add_pos(Pos,3)), Parsed);
   document(<<"<?",Rest/binary>>, Pos, Parsed) ->
       %% TODO: if short is not permitted, use as text
  -    code(Rest, add_pos(Pos,2), Parsed);
  +    {Rest0,Pos0,NParsed} = code(Rest, add_pos(Pos,2), Parsed),
  +    {Rest0,Pos0,[add_line(#eval{statements=NParsed},Pos)]};
   document(<<"\n",Rest/binary>>, Pos, Parsed) ->
       document(Rest, new_line(Pos), add_to_text(<<"\n">>, Pos, Parsed));
   document(<<L:1/binary,Rest/binary>>, Pos, Parsed) ->
  
positive.code: add_to_text(L, _Pos, [#text{text=Text}=T|Parsed]) ->
      NewText = <<Text/binary, L/binary>>,
      [T#text{text=NewText}|Parsed];
  add_to_text(L, {_Level,Row,Col}, Parsed) ->
      [#text{text=L, line={Row,Col}}|Parsed].
  
  add_pos({Level,Row,Col}, Offset) ->
      {Level,Row,Col+Offset}.
  
negative.code:     {Rest0, Pos0, [Var]} = variable(Rest, add_pos(Pos,1), []),
      conditions(Rest0, Pos0, add_op(Var, Parsed));
  conditions(<<Op:3/binary,Rest/binary>>, Pos, Parsed) when ?IS_OP3(Op) ->
      conditions(Rest, add_pos(Pos,3), add_op({Op,precedence0(Op)}, Parsed));
  conditions(<<Op:2/binary,Rest/binary>>, Pos, Parsed) when ?IS_OP2(Op) ->
      conditions(Rest, add_pos(Pos,2), add_op({Op,precedence0(Op)}, Parsed));
  conditions(<<Op:1/binary,Rest/binary>>, Pos, Parsed) when ?IS_OP1(Op) ->
      conditions(Rest, add_pos(Pos,1), add_op({Op,precedence(Op)}, Parsed));
  conditions(<<A:8,_/binary>> = Rest, Pos, Parsed) when ?IS_NUMBER(A) ->
  