mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Suuport custom separator
This commit is contained in:
+7
-4
@@ -9,12 +9,15 @@ class String
|
||||
# and pass the respective line.
|
||||
#
|
||||
# ISO 15.2.10.5.15
|
||||
def each_line(&block)
|
||||
def each_line(rs = "\n", &block)
|
||||
return block.call(self) if rs.nil?
|
||||
rs = rs.to_str
|
||||
offset = 0
|
||||
rs_len = rs.length
|
||||
this = dup
|
||||
while pos = this.index("\n", offset)
|
||||
block.call(this[offset, pos + 1 - offset])
|
||||
offset = pos + 1
|
||||
while pos = this.index(rs, offset)
|
||||
block.call(this[offset, pos + rs_len - offset])
|
||||
offset = pos + rs_len
|
||||
end
|
||||
block.call(this[offset, this.size - offset]) if this.size > offset
|
||||
self
|
||||
|
||||
@@ -341,6 +341,12 @@ assert('String#each_line', '15.2.10.5.15') do
|
||||
end
|
||||
|
||||
assert_equal list, n_list
|
||||
|
||||
n_list.clear
|
||||
a.each_line("li") do |line|
|
||||
n_list << line
|
||||
end
|
||||
assert_equal ["first li", "ne\nsecond li", "ne\nthird li", "ne"], n_list
|
||||
end
|
||||
|
||||
assert('String#empty?', '15.2.10.5.16') do
|
||||
|
||||
Reference in New Issue
Block a user