]> gitweb.factorcode.org Git - factor.git/blob - extra/irc/messages/parser/parser.factor
factor: trim using lists
[factor.git] / extra / irc / messages / parser / parser.factor
1 ! Copyright (C) 2009 Bruno Deferrari
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors irc.messages.base kernel sequences splitting ;
4 IN: irc.messages.parser
5
6 <PRIVATE
7 : split-at-first ( seq separators -- before after )
8     dupd '[ _ member? ] find [ cut rest ] [ swap ] if ;
9
10 ! ":ircuser!n=user@isp.net JOIN :#factortest"
11 : split-message ( string -- prefix command parameters trailing )
12     ":" ?head [ " " split1 ] [ f swap ] if
13     ":" split1
14     [ split-words harvest unclip swap ] dip ;
15
16 : sender ( irc-message -- sender )
17     prefix>> [ ":" ?head drop "!" split-at-first drop ] [ f ] if* ;
18 PRIVATE>
19
20 : string>irc-message ( string -- irc-message )
21     dup split-message
22     [ [ irc>type new ] [ >>command ] bi ]
23     [ >>parameters ]
24     [ >>trailing ]
25     tri*
26     [ prefix<< ] [ fill-irc-message-slots ] [ swap >>line ] tri
27     dup sender >>sender ;