diff options
Diffstat (limited to 'lib/IRC/Grammar/Actions.pm6')
-rw-r--r-- | lib/IRC/Grammar/Actions.pm6 | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/lib/IRC/Grammar/Actions.pm6 b/lib/IRC/Grammar/Actions.pm6 index 039f11e..7093b99 100644 --- a/lib/IRC/Grammar/Actions.pm6 +++ b/lib/IRC/Grammar/Actions.pm6 @@ -1,6 +1,26 @@ -class IRC::Grammar::Actions { - method class ($/) { $/.make: ~$/ } - method rules ($/) { $/.make: ~$/ } - method pair ($/) { $/.make: $<class>.made => $<rules>.made } - method TOP ($/) { $/.make: $<pair>».made } +unit class IRC::Grammar::Actions:ver<1.001001>; +method TOP ($/) { $/.make: $<message>>>.made } +method message ($/) { + my $pref = $/<prefix>; + my %args = command => ~$/<command>; + if ( $pref<servername>.defined ) { + %args<who><host> = ~$pref<servername>; + } + else { + %args<who><nick user host> = $pref<nick user host>».Str; + } + + my $p = $/<params>; + loop { + if ( $p<middle>.defined ) { + %args<params>.append: ~$p<middle>; + } + if ( $p<trailing>.defined ) { + %args<params>.append: ~$p<trailing>; + last; + } + $p = $p<params>; + } + + $/.make: %args; } |