30 lines
959 B
Factor
30 lines
959 B
Factor
! Copyright (C) 2009 Bruno Deferrari
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: kernel fry splitting ascii accessors combinators
|
|
arrays classes.tuple math.order words assocs
|
|
irc.messages.base sequences ;
|
|
IN: irc.messages.parser
|
|
|
|
<PRIVATE
|
|
: split-at-first ( seq separators -- before after )
|
|
dupd '[ _ member? ] find [ cut rest ] [ swap ] if ;
|
|
|
|
! ":ircuser!n=user@isp.net JOIN :#factortest"
|
|
: split-message ( string -- prefix command parameters trailing )
|
|
":" ?head [ " " split1 ] [ f swap ] if
|
|
":" split1
|
|
[ " " split harvest unclip swap ] dip ;
|
|
|
|
: sender ( irc-message -- sender )
|
|
prefix>> [ ":" ?head drop "!" split-at-first drop ] [ f ] if* ;
|
|
PRIVATE>
|
|
|
|
: string>irc-message ( string -- irc-message )
|
|
dup split-message
|
|
[ [ irc>type new ] [ >>command ] bi ]
|
|
[ >>parameters ]
|
|
[ >>trailing ]
|
|
tri*
|
|
[ prefix<< ] [ fill-irc-message-slots ] [ swap >>line ] tri
|
|
dup sender >>sender ;
|