string.c: consistent paragraph mode with IO
* string.c (rb_str_enumerate_lines): in paragraph mode, do not include newlines which separate paragraphs, so that it will be consistent with IO#each_line. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57184 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
110bfb7152
commit
091f99b4b9
15
string.c
15
string.c
@ -7511,18 +7511,17 @@ rb_str_enumerate_lines(int argc, VALUE *argv, VALUE str, int wantarray)
|
|||||||
subptr = adjusted;
|
subptr = adjusted;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
subend = hit + rslen;
|
subend = hit += rslen;
|
||||||
if (paragraph_mode) {
|
if (paragraph_mode) {
|
||||||
while (subend < pend) {
|
while (hit < pend) {
|
||||||
int n;
|
int n;
|
||||||
if (rb_enc_ascget(subend, pend, &n, enc) != '\r')
|
if (rb_enc_ascget(hit, pend, &n, enc) != '\r')
|
||||||
n = 0;
|
n = 0;
|
||||||
if (!rb_enc_is_newline(subend + n, pend, enc)) break;
|
if (!rb_enc_is_newline(hit + n, pend, enc)) break;
|
||||||
subend += n;
|
hit += n;
|
||||||
subend += rb_enc_mbclen(subend, pend, enc);
|
hit += rb_enc_mbclen(hit, pend, enc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hit = subend;
|
|
||||||
if (chomp) {
|
if (chomp) {
|
||||||
if (rsnewline) {
|
if (rsnewline) {
|
||||||
subend = chomp_newline(subptr, subend, enc);
|
subend = chomp_newline(subptr, subend, enc);
|
||||||
@ -7591,7 +7590,7 @@ rb_str_enumerate_lines(int argc, VALUE *argv, VALUE str, int wantarray)
|
|||||||
* "o\nworl"
|
* "o\nworl"
|
||||||
* "d"
|
* "d"
|
||||||
* Example three
|
* Example three
|
||||||
* "hello\n\n\n"
|
* "hello\n\n"
|
||||||
* "world"
|
* "world"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -661,8 +661,8 @@ CODE
|
|||||||
|
|
||||||
res=[]
|
res=[]
|
||||||
S("hello\n\n\nworld").lines(S('')).each {|x| res << x}
|
S("hello\n\n\nworld").lines(S('')).each {|x| res << x}
|
||||||
assert_equal(S("hello\n\n\n"), res[0])
|
assert_equal(S("hello\n\n"), res[0])
|
||||||
assert_equal(S("world"), res[1])
|
assert_equal(S("world"), res[1])
|
||||||
|
|
||||||
$/ = "!"
|
$/ = "!"
|
||||||
res=[]
|
res=[]
|
||||||
@ -782,8 +782,8 @@ CODE
|
|||||||
|
|
||||||
res=[]
|
res=[]
|
||||||
S("hello\n\n\nworld").each_line(S('')) {|x| res << x}
|
S("hello\n\n\nworld").each_line(S('')) {|x| res << x}
|
||||||
assert_equal(S("hello\n\n\n"), res[0])
|
assert_equal(S("hello\n\n"), res[0])
|
||||||
assert_equal(S("world"), res[1])
|
assert_equal(S("world"), res[1])
|
||||||
|
|
||||||
$/ = "!"
|
$/ = "!"
|
||||||
|
|
||||||
@ -824,8 +824,8 @@ CODE
|
|||||||
|
|
||||||
res = []
|
res = []
|
||||||
S("hello\n\n\nworld").each_line(S(''), chomp: true) {|x| res << x}
|
S("hello\n\n\nworld").each_line(S(''), chomp: true) {|x| res << x}
|
||||||
assert_equal(S("hello\n\n"), res[0])
|
assert_equal(S("hello\n"), res[0])
|
||||||
assert_equal(S("world"), res[1])
|
assert_equal(S("world"), res[1])
|
||||||
|
|
||||||
res = []
|
res = []
|
||||||
S("hello!world").each_line(S('!'), chomp: true) {|x| res << x}
|
S("hello!world").each_line(S('!'), chomp: true) {|x| res << x}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user