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