anchor.diff:      T#text_to_process{line={{line,R},{column,C}}};
   add_line(#text{}=T, {_,R,C}) -> T#text{line={{line,R},{column,C}}};
   add_line(#if_block{}=I, {_,R,C}) -> I#if_block{line={{line,R},{column,C}}};
  -add_line(#assign{}=A, {_,R,C}) -> A#assign{line={{line,R},{column,C}}}.
  +add_line(#assign{}=A, {_,R,C}) -> A#assign{line={{line,R},{column,C}}};
  +add_line(#array_element{}=A, {_,R,C}) ->
  +    A#array_element{line={{line,R},{column,C}}}.
   
   remove_spaces(<<SP:8,Rest/binary>>, Pos) when ?IS_SPACE(SP) ->
       remove_spaces(Rest, add_pos(Pos,1));
  
positive.code:     constant_wait(Rest, new_line(Pos), Parsed);
  constant_wait(Rest, Pos, Parsed) ->
      {Rest, Pos, Parsed}.
  
  function(<<SP:8,Rest/binary>>, Pos, [#call{}|_]=Parsed) when ?IS_SPACE(SP) ->
      function(Rest, add_pos(Pos,1), Parsed);
  
negative.code:     {Rest0, Pos0, Exp} = expression(Rest, NewPos, []),
      Constant = add_line(C#constant{type=define, value=Exp}, Pos),
      {Rest0, Pos0, Constant};
  expression(<<"?",Rest/binary>>, Pos, [{op,_}]=Exp) ->
      expression(Rest, add_pos(Pos,1), [#if_block{conditions=add_op('end', Exp)}]);
  expression(<<":",Rest/binary>>, Pos, [{op,_}=Exp,#if_block{}=If]) ->
      {Rest1, Pos1, ElseExp} = expression(Rest, add_pos(Pos,1), []),
      IfBlock = If#if_block{
          true_block = add_op('end', [Exp]),
          false_block = ElseExp
      },
      {Rest1, copy_level(Pos, Pos1), IfBlock};
  expression(<<>>, Pos, _Parsed) ->
      throw({error, {parse, Pos, incomplete_expression}}).
  
  variable(<<A:8,Rest/binary>>, Pos, [])
          when ?IS_ALPHA(A) orelse A =:= $_ orelse A >= 16#7f ->
      Var = add_line(#variable{name = <<A:8>>}, Pos),
      variable(Rest, add_pos(Pos,1), [Var]);
  variable(<<A:8,Rest/binary>>, {_,_,_}=Pos, [#variable{name=N}=V])
          when ?IS_NUMBER(A) orelse ?IS_ALPHA(A) orelse A =:= $_
          orelse A >= 16#7f ->
      variable(Rest, add_pos(Pos,1), [V#variable{name = <<N/binary,A:8>>}]);
  variable(<<SP:8,Rest/binary>>, {enclosed,_,_}=Pos, Var) when ?IS_SPACE(SP) ->
      variable(Rest, add_pos(Pos,1), Var);
  