anchor.diff:  -spec substr(utf8_string(), pos_integer(), integer()) -> utf8_string().
   substr(_, _, 0) ->
       <<>>;
  -substr(String, Start, Length) when Length > 0 ->
  -    substr(String, Start, Length - (1 + length(String) - Start));
  -substr(String, Start, Length) when Length < 0 ->
  -    reverse(substr(reverse(substr(String, Start)), 1 - Length)).
  +substr(Str, Start, Length) when Length > 0 ->
  +    substr(Str, Start, Length - (1 + length(Str) - Start));
  +substr(Str, Start, Length) when Length < 0 ->
  +    reverse(substr(reverse(substr(Str, Start)), 1 - Length)).
   
   %%% Local variables:
   %%% mode: erlang
  
positive.code: -spec substr(utf8_string(), integer()) -> utf8_string().
  substr(<<>>, _) ->
      <<>>;
  substr(String, 0) ->
      String;
  substr(String, 1) ->
      String;
  substr(<<_Char/utf8, Rest/bytes>>, Start) when Start > 1 ->
      substr(Rest, Start - 1);
  substr(String, Start) when Start < 0 ->
      substr(String, 1 + length(String) + Start).
  
  %% @doc Extracts a substring. The substring starts at the given position and
  %% it has the given length. If the length is negative, then the substring ends
  
negative.code: 
  %% @doc Simple case folding. See [http://www.unicode.org/reports/tr44/].
  -spec case_fold(utf8_string()) -> utf8_string().
  case_fold(Str) ->
      << <<(char_fold(C))/utf8>> || <<C/utf8>> <= Str >>.
  
  -spec char_fold(char()) -> char().
  char_fold(C) ->
  