2009-02-09 02:12:32 -05:00
|
|
|
! Copyright (C) 2009 Daniel Ehrenberg
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2013-07-28 00:17:37 -04:00
|
|
|
USING: fry kernel math sequences splitting strings wrap ;
|
2009-02-09 02:12:32 -05:00
|
|
|
IN: wrap.strings
|
|
|
|
|
|
|
|
<PRIVATE
|
|
|
|
|
|
|
|
: split-lines ( string -- elements-lines )
|
|
|
|
string-lines [
|
|
|
|
" \t" split harvest
|
2012-08-03 11:26:58 -04:00
|
|
|
[ dup length 1 <element> ] map!
|
|
|
|
] map! ;
|
2009-02-09 02:12:32 -05:00
|
|
|
|
|
|
|
: join-elements ( wrapped-lines -- lines )
|
2012-08-03 11:26:58 -04:00
|
|
|
[ " " join ] map! ;
|
2009-02-09 02:12:32 -05:00
|
|
|
|
|
|
|
: join-lines ( strings -- string )
|
|
|
|
"\n" join ;
|
|
|
|
|
|
|
|
PRIVATE>
|
|
|
|
|
2013-07-28 00:17:37 -04:00
|
|
|
: wrap-lines ( string width -- newlines )
|
2012-08-03 11:26:58 -04:00
|
|
|
[ split-lines ] dip '[ _ dup wrap join-elements ] map! concat ;
|
2009-02-09 02:12:32 -05:00
|
|
|
|
|
|
|
: wrap-string ( string width -- newstring )
|
|
|
|
wrap-lines join-lines ;
|
|
|
|
|
2013-07-28 00:17:37 -04:00
|
|
|
<PRIVATE
|
|
|
|
|
|
|
|
: make-indent ( indent -- indent' )
|
|
|
|
dup string? [ CHAR: \s <string> ] unless ; inline
|
|
|
|
|
|
|
|
PRIVATE>
|
|
|
|
|
2009-02-09 02:12:32 -05:00
|
|
|
: wrap-indented-string ( string width indent -- newstring )
|
2013-07-28 00:17:37 -04:00
|
|
|
make-indent [ length - wrap-lines ] keep
|
2013-08-05 14:25:01 -04:00
|
|
|
over empty? [ nip ] [ '[ _ prepend ] map! join-lines ] if ;
|