Skip to content

enum.c fixes. #129

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 21 additions & 22 deletions enum.c
Original file line number Diff line number Diff line change
Expand Up @@ -2506,27 +2506,26 @@ slicebefore_i(VALUE yielder, VALUE enumerator, int argc, VALUE *argv)
*
* Creates an enumerator for each chunked elements.
* The beginnings of chunks are defined by _pattern_ and the block.
* If _pattern_ === _elt_ returns true or
* the block returns true for the element,
* the element is beginning of a chunk.
*
* The === and block is called from the first element to the last element
* of _enum_.
* The result for the first element is ignored.
*
* The result enumerator yields the chunked elements as an array for +each+
* method.
* +each+ method can be called as follows.

* If <code>_pattern_ === _elt_</code> returns <code>true</code> or the block
* returns <code>true</code> for the element, the element is beginning of a
* chunk.

* The <code>===</code> and _block_ is called from the first element to the last
* element of _enum_. The result for the first element is ignored.

* The result enumerator yields the chunked elements as an array.
* So +each+ method can be called as follows:
*
* enum.slice_before(pattern).each { |ary| ... }
* enum.slice_before { |elt| bool }.each { |ary| ... }
* enum.slice_before(initial_state) { |elt, state| bool }.each { |ary| ... }
*
* Other methods of Enumerator class and Enumerable module,
* Other methods of the Enumerator class and Enumerable module,
* such as map, etc., are also usable.
*
* For example, iteration over ChangeLog entries can be implemented as
* follows.
* follows:
*
* # iterate over ChangeLog entries.
* open("ChangeLog") { |f|
Expand All @@ -2538,8 +2537,9 @@ slicebefore_i(VALUE yielder, VALUE enumerator, int argc, VALUE *argv)
* f.slice_before { |line| /\A\S/ === line }.each { |e| pp e }
* }
*
* "svn proplist -R" produces multiline output for each file.
* They can be chunked as follows:
*
* "svn proplist -R" produces multiline output for each file.
* They can be chunked as follows:
*
* IO.popen([{"LC_ALL"=>"C"}, "svn", "proplist", "-R"]) { |f|
* f.lines.slice_before(/\AProp/).each { |lines| p lines }
Expand Down Expand Up @@ -2567,15 +2567,14 @@ slicebefore_i(VALUE yielder, VALUE enumerator, int argc, VALUE *argv)
*
* However local variables are not appropriate to maintain state
* if the result enumerator is used twice or more.
* In such case, the last state of the 1st +each+ is used in 2nd +each+.
* _initial_state_ argument can be used to avoid this problem.
* In such a case, the last state of the 1st +each+ is used in the 2nd +each+.
* The _initial_state_ argument can be used to avoid this problem.
* If non-nil value is given as _initial_state_,
* it is duplicated for each "each" method invocation of the enumerator.
* it is duplicated for each +each+ method invocation of the enumerator.
* The duplicated object is passed to 2nd argument of the block for
* +slice_before+ method.
*
* # word wrapping.
* # this assumes all characters have same width.
* # Word wrapping. This assumes all characters have same width.
* def wordwrap(words, maxwidth)
* # if cols is a local variable, 2nd "each" may start with non-zero cols.
* words.slice_before(cols: 0) { |w, h|
Expand Down Expand Up @@ -2603,8 +2602,8 @@ slicebefore_i(VALUE yielder, VALUE enumerator, int argc, VALUE *argv)
* # 20
* # ----------
*
* mbox contains series of mails which start with Unix From line.
* So each mail can be extracted by slice before Unix From line.
* mbox contains series of mails which start with Unix From line.
* So each mail can be extracted by slice before Unix From line.
*
* # parse mbox
* open("mbox") { |f|
Expand Down