| 
									
										
										
										
											2009-03-05 20:11:46 -05:00
										 |  |  | ! Copyright (C) 2009 Bruno Deferrari | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2009-04-16 16:21:31 -04:00
										 |  |  | USING: kernel fry splitting ascii accessors combinators | 
					
						
							| 
									
										
										
										
											2009-03-05 20:11:46 -05:00
										 |  |  |        arrays classes.tuple math.order words assocs | 
					
						
							|  |  |  |        irc.messages.base sequences ;
 | 
					
						
							|  |  |  | IN: irc.messages.parser | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <PRIVATE
 | 
					
						
							|  |  |  | : split-at-first ( seq separators -- before after )
 | 
					
						
							| 
									
										
										
										
											2011-05-03 23:50:23 -04:00
										 |  |  |     dupd '[ _ member? ] find [ cut rest ] [ swap ] if ;
 | 
					
						
							| 
									
										
										
										
											2009-03-05 20:11:46 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-09 14:49:19 -04:00
										 |  |  | ! ":ircuser!n=user@isp.net JOIN :#factortest" | 
					
						
							| 
									
										
										
										
											2009-03-05 20:11:46 -05:00
										 |  |  | : split-message ( string -- prefix command parameters trailing )
 | 
					
						
							| 
									
										
										
										
											2016-05-09 14:49:19 -04:00
										 |  |  |     ":" ?head [ " " split1 ] [ f swap ] if
 | 
					
						
							|  |  |  |     ":" split1 | 
					
						
							|  |  |  |     [ " " split harvest unclip swap ] dip ;
 | 
					
						
							| 
									
										
										
										
											2009-03-05 20:11:46 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : sender ( irc-message -- sender )
 | 
					
						
							| 
									
										
										
										
											2016-05-09 14:49:19 -04:00
										 |  |  |     prefix>> [ ":" ?head drop "!" split-at-first drop ] [ f ] if* ;
 | 
					
						
							| 
									
										
										
										
											2009-03-05 20:11:46 -05:00
										 |  |  | PRIVATE>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : string>irc-message ( string -- irc-message )
 | 
					
						
							|  |  |  |     dup split-message | 
					
						
							|  |  |  |     [ [ irc>type new ] [ >>command ] bi ] | 
					
						
							|  |  |  |     [ >>parameters ] | 
					
						
							|  |  |  |     [ >>trailing ] | 
					
						
							|  |  |  |     tri*
 | 
					
						
							| 
									
										
										
										
											2010-05-05 16:52:54 -04:00
										 |  |  |     [ prefix<< ] [ fill-irc-message-slots ] [ swap >>line ] tri
 | 
					
						
							| 
									
										
										
										
											2009-04-16 16:21:31 -04:00
										 |  |  |     dup sender >>sender ;
 |