]> gitweb.factorcode.org Git - factor.git/blob - basis/wrap/words/words.factor
Using "same?" in more places.
[factor.git] / basis / wrap / words / words.factor
1 ! Copyright (C) 2009 Daniel Ehrenberg
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: sequences kernel splitting.monotonic accessors grouping wrap ;
4 IN: wrap.words
5
6 TUPLE: word key width break? ;
7 C: <word> word
8
9 <PRIVATE
10
11 : words-length ( words -- length )
12     [ width>> ] map-sum ;
13
14 : make-element ( whites blacks -- element )
15     [ append ] [ [ words-length ] bi@ ] 2bi <element> ;
16  
17 : ?first2 ( seq -- first/f second/f )
18     [ ?first ] [ ?second ] bi ;
19
20 : split-words ( seq -- half-elements )
21     [ [ break?>> ] same? ] monotonic-split ;
22
23 : ?first-break ( seq -- newseq f/element )
24     dup first first break?>>
25     [ unclip-slice f swap make-element ]
26     [ f ] if ;
27
28 : make-elements ( seq f/element -- elements )
29     [ 2 <groups> [ ?first2 make-element ] map ] dip
30     [ prefix ] when* ;
31
32 : words>elements ( seq -- newseq )
33     split-words ?first-break make-elements ;
34
35 PRIVATE>
36
37 : wrap-words ( words line-max line-ideal -- lines )
38     [ words>elements ] 2dip wrap [ concat ] map ;
39