From ccb3f7f9768d3c28783c771df47eec1829e51802 Mon Sep 17 00:00:00 2001 From: Dan Gudmundsson Date: Thu, 29 Jun 2017 12:36:25 +0200 Subject: Deprecate old string functions They should not be used. --- lib/stdlib/doc/src/string.xml | 396 +---------------------------- lib/stdlib/src/otp_internal.erl | 46 ++++ lib/stdlib/src/string.erl | 10 + lib/stdlib/uc_spec/gen_unicode_mod.escript | 24 +- 4 files changed, 71 insertions(+), 405 deletions(-) diff --git a/lib/stdlib/doc/src/string.xml b/lib/stdlib/doc/src/string.xml index 9d5edd9ecf..130fc74a28 100644 --- a/lib/stdlib/doc/src/string.xml +++ b/lib/stdlib/doc/src/string.xml @@ -109,10 +109,8 @@

This module has been reworked in Erlang/OTP 20 to handle unicode:chardata() and operate on grapheme - clusters. The old - functions that only work on Latin-1 lists as input - are still available but should not be - used. They will be deprecated in Erlang/OTP 21. + clusters. The old functions that only work on Latin-1 lists as input + are kept for backwards compatibility reasons but should not be used.

@@ -594,7 +592,7 @@ ÖÄÅ or both, indicates from which direction characters are to be removed.

-

Default Characters are the set of +

Default Characters is the set of nonbreakable whitespace codepoints, defined as Pattern_White_Space in Unicode Standard Annex #31. @@ -631,393 +629,5 @@ ÖÄÅ - -

- - Obsolete API functions -

Here follows the function of the old API. - These functions only work on a list of Latin-1 characters. -

-

- The functions are kept for backward compatibility, but are - not recommended. - They will be deprecated in Erlang/OTP 21. -

-

Any undocumented functions in string are not to be used.

-
-
- - - - - - Center a string. - -

Returns a string, where String is centered in the - string and surrounded by blanks or Character. - The resulting string has length Number.

-

This function is obsolete. - Use - pad/3. -

-
-
- - - - - Return a string consisting of numbers of characters. - -

Returns a string consisting of Number characters - Character. Optionally, the string can end with - string Tail.

-

This function is obsolete. - Use - lists:duplicate/2.

-
-
- - - - Return the index of the first occurrence of - a character in a string. - -

Returns the index of the first occurrence of - Character in String. Returns - 0 if Character does not occur.

-

This function is obsolete. - Use - find/2.

-
-
- - - - Concatenate two strings. - -

Concatenates String1 and - String2 to form a new string - String3, which is returned.

-

- This function is obsolete. - Use [String1, String2] as - Data argument, and call - - unicode:characters_to_list/2 or - - unicode:characters_to_binary/2 - to flatten the output. -

-
-
- - - - Copy a string. - -

Returns a string containing String repeated - Number times.

-

This function is obsolete. - Use - lists:duplicate/2.

-
-
- - - - Span characters at start of a string. - -

Returns the length of the maximum initial segment of - String, which consists entirely of characters - not from Chars.

-

This function is obsolete. - Use - take/3.

-

Example:

- -> string:cspan("\t abcdef", " \t"). -0 -
-
- - - - Join a list of strings with separator. - -

Returns a string with the elements of StringList - separated by the string in Separator.

-

This function is obsolete. - Use - lists:join/2.

-

Example:

- -> join(["one", "two", "three"], ", "). -"one, two, three" -
-
- - - - - Adjust left end of a string. - -

Returns String with the length adjusted in - accordance with Number. The left margin is - fixed. If length(String) < - Number, then String is padded - with blanks or Characters.

-

This function is obsolete. - Use - pad/2 or - pad/3.

-

Example:

- -> string:left("Hello",10,$.). -"Hello....." -
-
- - - - Return the length of a string. - -

Returns the number of characters in String.

-

This function is obsolete. - Use - length/1.

-
-
- - - - Return the index of the last occurrence of - a character in a string. - -

Returns the index of the last occurrence of - Character in String. Returns - 0 if Character does not occur.

-

This function is obsolete. - Use - find/3.

-
-
- - - - - Adjust right end of a string. - -

Returns String with the length adjusted in - accordance with Number. The right margin is - fixed. If the length of (String) < - Number, then String is padded - with blanks or Characters.

-

This function is obsolete. - Use - pad/3.

-

Example:

- -> string:right("Hello", 10, $.). -".....Hello" -
-
- - - - Find the index of a substring. - -

Returns the position where the last occurrence of - SubString begins in String. - Returns 0 if SubString - does not exist in String.

-

This function is obsolete. - Use - find/3.

-

Example:

- -> string:rstr(" Hello Hello World World ", "Hello World"). -8 -
-
- - - - Span characters at start of a string. - -

Returns the length of the maximum initial segment of - String, which consists entirely of characters - from Chars.

-

This function is obsolete. - Use - take/2.

-

Example:

- -> string:span("\t abcdef", " \t"). -5 -
-
- - - - Find the index of a substring. - -

Returns the position where the first occurrence of - SubString begins in String. - Returns 0 if SubString - does not exist in String.

-

This function is obsolete. - Use - find/2.

-

Example:

- -> string:str(" Hello Hello World World ", "Hello World"). -8 -
-
- - - - - - Strip leading or trailing characters. - -

Returns a string, where leading or trailing, or both, blanks or a - number of Character have been removed. - Direction, which can be left, right, - or both, indicates from which direction blanks are to be - removed. strip/1 is equivalent to - strip(String, both).

-

This function is obsolete. - Use - trim/3.

-

Example:

- -> string:strip("...Hello.....", both, $.). -"Hello" -
-
- - - - - Extract a substring. - -

Returns a substring of String, starting at - position Start to the end of the string, or to - and including position Stop.

-

This function is obsolete. - Use - slice/3.

-

Example:

- -sub_string("Hello World", 4, 8). -"lo Wo" -
-
- - - - - Return a substring of a string. - -

Returns a substring of String, starting at - position Start, and ending at the end of the - string or at length Length.

-

This function is obsolete. - Use - slice/3.

-

Example:

- -> substr("Hello World", 4, 5). -"lo Wo" -
-
- - - - - Extract subword. - -

Returns the word in position Number of - String. Words are separated by blanks or - Characters.

-

This function is obsolete. - Use - nth_lexeme/3.

-

Example:

- -> string:sub_word(" Hello old boy !",3,$o). -"ld b" -
-
- - - - - - - Convert case of string (ISO/IEC 8859-1). - - - - - -

The specified string or character is case-converted. Notice that - the supported character set is ISO/IEC 8859-1 (also called Latin 1); - all values outside this set are unchanged

-

This function is obsolete use - lowercase/1, - uppercase/1, - titlecase/1 or - casefold/1.

-
-
- - - - Split string into tokens. - -

Returns a list of tokens in String, separated - by the characters in SeparatorList.

-

Example:

- -> tokens("abc defxxghix jkl", "x "). -["abc", "def", "ghi", "jkl"] -

Notice that, as shown in this example, two or more - adjacent separator characters in String - are treated as one. That is, there are no empty - strings in the resulting list of tokens.

-

This function is obsolete. - Use - lexemes/2.

-
-
- - - - - Count blank separated words. - -

Returns the number of words in String, separated - by blanks or Character.

-

This function is obsolete. - Use - lexemes/2.

-

Example:

- -> words(" Hello old boy!", $o). -4 -
-
-
- -
- Notes -

Some of the general string functions can seem to overlap each - other. The reason is that this string package is the - combination of two earlier packages and all functions of - both packages have been retained.

-
- diff --git a/lib/stdlib/src/otp_internal.erl b/lib/stdlib/src/otp_internal.erl index 9e9c0dc413..b547657a7f 100644 --- a/lib/stdlib/src/otp_internal.erl +++ b/lib/stdlib/src/otp_internal.erl @@ -615,6 +615,52 @@ obsolete_1(filename, find_src, 2) -> obsolete_1(erlang, hash, 2) -> {removed, {erlang, phash2, 2}, "20.0"}; +%% Added in OTP-21 +obsolete_1(string, len, 1) -> + {deprecated, "deprecated; use string:length/3 instead"}; +obsolete_1(string, concat, 2) -> + {deprecated, "deprecated; use [Str1,Str2] instead"}; +obsolete_1(string, str, 2) -> + {deprecated, "deprecated; use string:find/2 instead"}; +obsolete_1(string, rstr, 2) -> + {deprecated, "deprecated; use string:find/3 instead"}; +obsolete_1(string, chr, 2) -> + {deprecated, "deprecated; use string:find/2 instead"}; +obsolete_1(string, rchr, 2) -> + {deprecated, "deprecated; use string:find/3 instead"}; +obsolete_1(string, span, 2) -> + {deprecated, "deprecated; use string:take/2 instead"}; +obsolete_1(string, cspan, 2) -> + {deprecated, "deprecated; use string:take/3 instead"}; +obsolete_1(string, substr, _) -> + {deprecated, "deprecated; use string:slice/3 instead"}; +obsolete_1(string, tokens, 2) -> + {deprecated, "deprecated; use string:lexemes/2 instead"}; +obsolete_1(string, chars, _) -> + {deprecated, "deprecated; use lists:duplicate/2 instead"}; +obsolete_1(string, copies, _) -> + {deprecated, "deprecated; use lists:duplicate/2 instead"}; +obsolete_1(string, words, _) -> + {deprecated, "deprecated; use string:lexemes/2 instead"}; +obsolete_1(string, strip, _) -> + {deprecated, "deprecated; use string:trim/3 instead"}; +obsolete_1(string, sub_word, _) -> + {deprecated, "deprecated; use string:nth_lexeme/3 instead"}; +obsolete_1(string, sub_string, _) -> + {deprecated, "deprecated; use string:slice/3 instead"}; +obsolete_1(string, left, _) -> + {deprecated, "deprecated; use string:pad/3 instead"}; +obsolete_1(string, right, _) -> + {deprecated, "deprecated; use string:pad/3 instead"}; +obsolete_1(string, centre, _) -> + {deprecated, "deprecated; use string:pad/3 instead"}; +obsolete_1(string, join, _) -> + {deprecated, "deprecated; use lists:join/2 instead"}; +obsolete_1(string, to_upper, _) -> + {deprecated, "deprecated; use string:uppercase/1 or string:titlecase/1 instead"}; +obsolete_1(string, to_lower, _) -> + {deprecated, "deprecated; use string:lowercase/1 or string:casefold/1 instead"}; + %% not obsolete obsolete_1(_, _, _) -> diff --git a/lib/stdlib/src/string.erl b/lib/stdlib/src/string.erl index 4972da297d..5a4d2df2a6 100644 --- a/lib/stdlib/src/string.erl +++ b/lib/stdlib/src/string.erl @@ -87,6 +87,16 @@ %%% May be removed -export([list_to_float/1, list_to_integer/1]). +-deprecated([{len,1},{concat,2}, + {str,2},{chr,2},{rchr,2},{rstr,2}, + {span,2},{cspan,2},{substr,'_'},{tokens,2}, + {chars,'_'}, + {copies,2},{words,'_'},{strip,'_'}, + {sub_word,'_'},{left,'_'},{right,'_'}, + {sub_string,'_'},{centre,'_'},{join,2}, + {to_upper,1}, {to_lower,1} + ]). + %% Uses bifs: string:list_to_float/1 and string:list_to_integer/1 -spec list_to_float(String) -> {Float, Rest} | {'error', Reason} when String :: string(), diff --git a/lib/stdlib/uc_spec/gen_unicode_mod.escript b/lib/stdlib/uc_spec/gen_unicode_mod.escript index fefd7d3b70..0b32852b6e 100755 --- a/lib/stdlib/uc_spec/gen_unicode_mod.escript +++ b/lib/stdlib/uc_spec/gen_unicode_mod.escript @@ -65,7 +65,7 @@ main(_) -> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% parse_unicode_data(Line0, Acc) -> - Line = string:strip(Line0, right, $\n), + Line = string:chomp(Line0), [CodePoint,Name,_Cat,Class,_BiDi,Decomp, _N1,_N2,_N3,_BDMirror,_Uni1,_Iso|Case] = tokens(Line, ";"), {Dec,Comp} = case to_decomp(Decomp) of @@ -78,14 +78,14 @@ parse_unicode_data(Line0, Acc) -> |Acc]. to_class(String) -> - list_to_integer(string:strip(String, both)). + list_to_integer(string:trim(String, both)). to_decomp("") -> []; to_decomp("<" ++ Str) -> - [Tag,Rest] = string:tokens(Str, ">"), + [Tag,Rest] = string:lexemes(Str, ">"), {list_to_atom(Tag), to_decomp(Rest)}; to_decomp(CodePoints) -> - CPL = string:tokens(CodePoints, " "), + CPL = string:lexemes(CodePoints, " "), [hex_to_int(CP) || CP <- CPL]. to_case(["","",""]) -> []; @@ -105,20 +105,20 @@ parse_special_casing(Line, Table) -> array:set(CP, Entry#cp{cs=Case}, Table). to_scase([Lower,Title,Upper|_]) -> - {unlist([hex_to_int(CP) || CP <- string:strip(string:tokens(Upper, " "), both)]), - unlist([hex_to_int(CP) || CP <- string:strip(string:tokens(Lower, " "), both)]), - unlist([hex_to_int(CP) || CP <- string:strip(string:tokens(Title, " "), both)]), + {unlist([hex_to_int(CP) || CP <- string:lexemes(Upper, " ")]), + unlist([hex_to_int(CP) || CP <- string:lexemes(Lower, " ")]), + unlist([hex_to_int(CP) || CP <- string:lexemes(Title, " ")]), []}. parse_case_folding(Line, Table) -> [CodePoint, Class0, CaseStr |_Comments] = tokens(Line, ";"), - Class = string:strip(Class0, both), + Class = string:trim(Class0, both), if Class =:= "T" -> Table; %% Do not support localization yet Class =:= "S" -> Table; %% Ignore simple true -> CP = hex_to_int(CodePoint), Case = unlist([hex_to_int(CPC) || - CPC <- string:strip(string:tokens(CaseStr, " "), both)]), + CPC <- string:lexemes(CaseStr, " ")]), #cp{cs={U,L,T,_}} = Entry = array:get(CP, Table), array:set(CP, Entry#cp{cs={U,L,T,Case}}, Table) end. @@ -869,10 +869,10 @@ optimize_ranges_1(Rs) -> hex_to_int([]) -> []; hex_to_int(HexStr) -> - list_to_integer(string:strip(HexStr, both), 16). + list_to_integer(string:trim(HexStr, both), 16). to_atom(Str) -> - list_to_atom(string:to_lower(string:strip(Str, both))). + list_to_atom(string:lowercase(string:trim(Str, both))). foldl(Fun, Acc, Fd) -> Get = fun() -> file:read_line(Fd) end, @@ -892,7 +892,7 @@ foldl_1(Fun, Acc, Get) -> -%% Differs from string:tokens, it returns empty string as token between two delimiters +%% Differs from string:lexemes, it returns empty string as token between two delimiters tokens(S, [C]) -> tokens(lists:reverse(S), C, []). -- cgit v1.2.3