anchor.diff:    %% Add spaces around []()| and ...
     Source = re:replace(Source0, "([\\[\\]\\(\\)\\|]|\\.\\.\\.)", " \\1 ",
                         [{return, list}, global]),
  -  State = #st{ tokens  = string:tokens(Source, " ")
  -             , options = Options
  -             , mode    = parse_pattern
  -             },
  +  State = #state{ tokens  = string:tokens(Source, " ")
  +                , options = Options
  +                , mode    = parse_pattern
  +                },
     {Result, _} = parse_expr(State),
     #required{children=Result}.
   
  
positive.code: 
  %%%_* Records =================================================================
  
  -record(st, { options = [] :: [child_pattern()]
              , tokens  = [] :: [string()]
              , mode         :: parse_mode()
              }).
  
  %% Parent patterns
  -record(one_or_more , {children :: [pattern()]}).
  
negative.code:       Opt ++ parse_args_tokens(State);
      [$-|_]         ->
        {Opts, State} = parse_shorts(State0),
  parse_args_tokens(#state{tokens=[]}) -> [];
        Opts ++ parse_args_tokens(State);
      _              ->
        [#argument{value=current(State0)}|parse_args_tokens(move(State0))]
    end.
  
  current(#state{tokens=[Current|_]}) -> Current;
  current(#state{tokens=[]})          -> undefined.
  move(#state{tokens=[_|Rest]}=St)    -> St#state{tokens=Rest}.
  tokens(#state{tokens=Tokens})       -> Tokens.
  rest(#state{tokens=[_|Rest]})       -> Rest.
  options(#state{options=Options})    -> Options.
  
  parse_long(State0) ->
    {Raw, Value} = partition(current(State0), "="),
  