summaryrefslogtreecommitdiffhomepage
path: root/mrblib
diff options
context:
space:
mode:
Diffstat (limited to 'mrblib')
-rw-r--r--mrblib/string.rb42
1 files changed, 13 insertions, 29 deletions
diff --git a/mrblib/string.rb b/mrblib/string.rb
index f1c7f3ba4..d72002209 100644
--- a/mrblib/string.rb
+++ b/mrblib/string.rb
@@ -20,42 +20,26 @@ class String
end
raise TypeError unless separator.is_a?(String)
- pointer = 0
+ paragraph_mode = false
+ if separator.empty?
+ paragraph_mode = true
+ separator = "\n\n"
+ end
start = 0
string = dup
self_len = length
sep_len = separator.length
should_yield_subclass_instances = self.class != String
- if separator.empty?
- matched_newlines = 0
- while pointer < self_len
- c = string[pointer]
- if c == "\n"
- matched_newlines += 1
- elsif matched_newlines > 1 && should_yield_subclass_instances
- block.call(self.class.new(string[start, pointer - start]))
- matched_newlines = 0
- start = pointer
- elsif matched_newlines > 1
- block.call(string[start, pointer - start])
- matched_newlines = 0
- start = pointer
- else
- matched_newlines = 0
- end
- pointer += 1
- end
- else
- while (pointer = string.index(separator, start))
- pointer += sep_len
- if should_yield_subclass_instances
- block.call(self.class.new(string[start, pointer - start]))
- else
- block.call(string[start, pointer - start])
- end
- start = pointer
+ while (pointer = string.index(separator, start))
+ pointer += sep_len
+ pointer += 1 while paragraph_mode && string[pointer] == "\n"
+ if should_yield_subclass_instances
+ block.call(self.class.new(string[start, pointer - start]))
+ else
+ block.call(string[start, pointer - start])
end
+ start = pointer
end
return self if start == self_len