anchor.diff:      case maps:get(unrecognized, Opts, skip) of
           skip ->
               skip;
  +        keep ->
  +            keep;
           Char when is_integer(Char) ->
               Char
       end.
  +
  +
  +-type norm_words_opts() ::
  +    norm_opts() | #{split => binary()}.
  +
  +
  +%% @doc
  +-spec normalize_words(string()|binary()) ->
  +    binary().
  +
  +normalize_words(Text) ->
  +    normalize_words(Text, #{}).
  +
  +
  +%% @doc
  +-spec normalize_words(string()|binary(), norm_words_opts()) ->
  +    binary().
  +
  +normalize_words(Text, Opts) ->
  +    String = norm(nklib_util:to_list(Text), Opts, []),
  +    Chars = maps:get(split, Opts, [32, $., $/, $-, $_, $,, $;, $:]),
  +    norm_split(String, Chars, false, [], []).
  +
  +-compile(export_all).
  +norm_split([], _Chars, _Skipping, [], Acc2) ->
  +    lists:reverse(Acc2);
  +
  +norm_split([], _Chars, _Skipping, Acc1, Acc2) ->
  +    Word = list_to_binary(lists:reverse(Acc1)),
  +    lists:reverse([Word|Acc2]);
  +
  +norm_split([Char|Rest], Chars, false, Acc1, Acc2) ->
  +    case lists:member(Char, Chars) of
  +        true when Acc1==[] ->
  +            norm_split(Rest, Chars, true, [], Acc2);
  +        true ->
  +            Word = list_to_binary(lists:reverse(Acc1)),
  +            norm_split(Rest, Chars, true, [], [Word|Acc2]);
  +        false ->
  +            norm_split(Rest, Chars, false, [Char|Acc1], Acc2)
  +    end;
  +
  +norm_split([Char|Rest], Chars, true, [], Acc2) ->
  +    case lists:member(Char, Chars) of
  +        true ->
  +            norm_split(Rest, Chars, true, [], Acc2);
  +        false ->
  +            norm_split(Rest, Chars, false, [Char], Acc2)
  +    end.
  +
  +
  +
   
   
   
  
positive.code:     S4 = "-!",
      <<>> = normalize(S4),
      <<"!">> = normalize(S4, #{allowed=>[$!]}),
      <<"+!">> = normalize(S4, #{allowed=>[$!], unrecognized=>$+}),
      ok.
  
  
  
negative.code:     binary().
  
  normalize(Text, Opts) ->
      String = norm(nklib_util:to_list(Text), Opts, []),
      list_to_binary(String).
  
  
  %% @private
  norm([], _Opts, Acc) ->
      lists:reverse(string:strip(Acc));
  
  norm([32|T], Opts, Acc) ->
      case maps:get(space, Opts, allowed) of
  