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
|
|
|
|
|
|
|
: split-trailing ( string -- string string/f ) ":" split1 ;
|
|
|
|
: remove-heading-: ( seq -- seq ) ":" ?head drop ;
|
|
|
|
|
|
|
|
: split-prefix ( string -- string/f string )
|
|
|
|
dup ":" head? [
|
|
|
|
remove-heading-: " " split1
|
|
|
|
] [ f swap ] if ;
|
|
|
|
|
|
|
|
: split-message ( string -- prefix command parameters trailing )
|
|
|
|
split-prefix split-trailing
|
|
|
|
[ [ blank? ] trim " " split unclip swap ] dip ;
|
|
|
|
|
|
|
|
: sender ( irc-message -- sender )
|
|
|
|
prefix>> [ remove-heading-: "!" split-at-first drop ] [ f ] if* ;
|
|
|
|
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 ;
|