anchor.diff:  
   new_line({Level,Row,_Col}) ->
       {Level,Row+1,1}.
  +
  +if_old_block_level({_,Row,Col}) -> {if_old_block,Row,Col}.
  +for_old_block_level({_,Row,Col}) -> {for_old_block,Row,Col}.
  +foreach_old_block_level({_,Row,Col}) -> {foreach_old_block,Row,Col}.
  +while_old_block_level({_,Row,Col}) -> {while_old_block,Row,Col}.
  +
  +if_block_level({_,Row,Col}) -> {if_block,Row,Col}.
  +for_block_level({_,Row,Col}) -> {for_block,Row,Col}.
  +foreach_block_level({_,Row,Col}) -> {foreach_block,Row,Col}.
  +while_block_level({_,Row,Col}) -> {while_block,Row,Col}.
   
   normal_level({_,Row,Col}) -> {code,Row,Col}.
   code_block_level({_,Row,Col}) -> {code_block,Row,Col}.
  
positive.code: st_else(<<SP:8,Rest/binary>>, Pos, Parsed) when ?IS_NEWLINE(SP) ->
      st_else(Rest, new_line(Pos), Parsed);
  st_else(Rest0, {Level,_,_}=Pos0, [#if_block{}=If|Parsed]) ->
      {Rest1, {_,Row1,Col1}, CodeBlock} = code_block(Rest0, add_pos(Pos0,4), []),
      IfWithElse = If#if_block{false_block=CodeBlock},
      {Rest1, {Level,Row1,Col1}, [IfWithElse|Parsed]};
  st_else(<<>>, Pos, _Parsed) ->
  
negative.code:     code(Rest1, copy_level(Pos,Pos1), NewParsed);
  code(<<D:8,O:8,SP:8,Rest/binary>>, Pos, Parsed)
          when ?OR(D,$d,$D) andalso ?OR(O,$o,$O) andalso
          (?IS_SPACE(SP) orelse ?OR(SP,${,$:)) ->
      {Rest0, Pos0, [DoWhile]} = st_do_while(Rest, add_pos(Pos,3), []),
      code(Rest0, copy_level(Pos,Pos0), [DoWhile|Parsed]);
  code(<<F:8,O:8,R:8,E:8,A:8,C:8,H:8,SP:8,Rest/binary>>, Pos, Parsed)
  