| 
									
										
										
										
											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 ;
 |