]> gitweb.factorcode.org Git - factor.git/blob - basis/wrap/strings/strings.factor
46e8b792b7909699bbf691bf5cb0f1566ffffe07
[factor.git] / basis / wrap / strings / strings.factor
1 ! Copyright (C) 2009 Daniel Ehrenberg
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: fry kernel math sequences splitting strings wrap ;
4 IN: wrap.strings
5
6 <PRIVATE
7
8 : split-line ( string -- elements )
9     dup [ " \t" member? not ] find drop 0 or
10     [ f swap ] [ cut ] if-zero
11     " \t" split harvest [ dup length 1 <element> ] map!
12     swap [ 0 over length <element> prefix ] when* ;
13
14 : split-lines ( string -- elements-lines )
15     lines [ split-line ] map! ;
16
17 : join-elements ( wrapped-lines -- lines )
18     [ " " join ] map! ;
19
20 : join-lines ( strings -- string )
21     "\n" join ;
22
23 PRIVATE>
24
25 : wrap-lines ( string width -- newlines )
26     [ split-lines ] dip '[ _ wrap join-elements ] map! concat ;
27
28 : wrap-string ( string width -- newstring )
29     wrap-lines join-lines ;
30
31 <PRIVATE
32
33 : make-indent ( indent -- indent' )
34     dup string? [ CHAR: \s <string> ] unless ; inline
35
36 PRIVATE>
37
38 : wrap-indented-string ( string width indent -- newstring )
39     make-indent [ length - wrap-lines ] keep
40     over empty? [ nip ] [ '[ _ prepend ] map! join-lines ] if ;