jeffrafter-marvin 0.1.20081115 → 0.1.20081120

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. data/README.textile +105 -32
  2. data/VERSION.yml +1 -1
  3. data/bin/marvin +10 -6
  4. data/config/connections.yml.sample +5 -0
  5. data/config/settings.yml.sample +2 -7
  6. data/config/setup.rb +6 -1
  7. data/handlers/debug_handler.rb +5 -0
  8. data/handlers/hello_world.rb +1 -1
  9. data/lib/marvin.rb +13 -9
  10. data/lib/marvin/abstract_client.rb +88 -43
  11. data/lib/marvin/abstract_parser.rb +14 -2
  12. data/lib/marvin/base.rb +44 -6
  13. data/lib/marvin/dispatchable.rb +9 -4
  14. data/lib/marvin/exception_tracker.rb +1 -1
  15. data/lib/marvin/exceptions.rb +3 -0
  16. data/lib/marvin/irc.rb +4 -5
  17. data/lib/marvin/irc/client.rb +39 -7
  18. data/lib/marvin/irc/event.rb +9 -4
  19. data/lib/marvin/irc/replies.rb +154 -0
  20. data/lib/marvin/loader.rb +26 -8
  21. data/lib/marvin/logger.rb +66 -3
  22. data/lib/marvin/options.rb +33 -0
  23. data/lib/marvin/parsers.rb +3 -0
  24. data/lib/marvin/parsers/command.rb +105 -0
  25. data/lib/marvin/parsers/prefixes.rb +8 -0
  26. data/lib/marvin/parsers/prefixes/host_mask.rb +30 -0
  27. data/lib/marvin/parsers/prefixes/server.rb +24 -0
  28. data/lib/marvin/parsers/ragel_parser.rb +713 -0
  29. data/lib/marvin/parsers/ragel_parser.rl +144 -0
  30. data/lib/marvin/parsers/regexp_parser.rb +0 -3
  31. data/lib/marvin/parsers/simple_parser.rb +20 -81
  32. data/lib/marvin/settings.rb +9 -9
  33. data/lib/marvin/test_client.rb +5 -1
  34. data/lib/marvin/util.rb +20 -3
  35. data/script/{run → client} +0 -0
  36. data/script/daemon-runner +1 -1
  37. data/script/install +3 -0
  38. data/test/parser_comparison.rb +62 -0
  39. data/test/parser_test.rb +264 -0
  40. data/test/test_helper.rb +10 -0
  41. metadata +19 -9
  42. data/lib/marvin/drb_handler.rb +0 -7
  43. data/lib/marvin/irc/abstract_server.rb +0 -4
  44. data/lib/marvin/irc/base_server.rb +0 -11
  45. data/lib/marvin/irc/socket_client.rb +0 -69
  46. data/lib/marvin/parsers/simple_parser/default_events.rb +0 -37
  47. data/lib/marvin/parsers/simple_parser/event_extensions.rb +0 -14
  48. data/lib/marvin/parsers/simple_parser/prefixes.rb +0 -34
@@ -1,11 +1,11 @@
1
1
  module Marvin
2
2
  class Loader
3
3
 
4
- cattr_accessor :setup_block
5
-
6
- cattr_accessor :start_hooks, :stop_hooks
4
+ cattr_accessor :start_hooks, :stop_hooks, :setup_block, :type
7
5
  self.stop_hooks, self.start_hooks = [], []
8
6
 
7
+ self.type = :client
8
+
9
9
  def self.before_connecting(&blk)
10
10
  self.setup_block = blk
11
11
  end
@@ -31,8 +31,15 @@ module Marvin
31
31
 
32
32
  def load_settings
33
33
  Marvin::Settings.setup
34
- Marvin::Settings.default_client.configuration = Marvin::Settings.to_hash
35
- Marvin::Settings.default_client.setup
34
+ case Marvin::Loader.type
35
+ when :client
36
+ Marvin::Settings.default_client.configuration = Marvin::Settings.to_hash
37
+ Marvin::Settings.default_client.setup
38
+ when :distributed_client
39
+ Marvin::Settings.default_client = Marvin::Distributed::DRbClient
40
+ when :server
41
+ when :console
42
+ end
36
43
  end
37
44
 
38
45
  def pre_connect_setup
@@ -42,21 +49,32 @@ module Marvin
42
49
  end
43
50
 
44
51
  def run!
52
+ Marvin::Options.parse! unless self.type == :console
45
53
  self.setup_defaults
46
54
  self.load_settings
47
55
  self.load_handlers
48
56
  self.pre_connect_setup
49
57
  self.start_hooks.each { |h| h.call }
50
- Marvin::Settings.default_client.run
58
+ case self.type
59
+ when :client
60
+ Marvin::Settings.default_client.run
61
+ when :server
62
+ Marvin::IRC::Server.run
63
+ when :ring_server
64
+ Marvin::Distributed::RingServer.run
65
+ when :distributed_client
66
+ Marvin::Distributed::DRbClient.run
67
+ end
51
68
  end
52
69
 
53
70
  def stop!
54
- Marvin::Settings.default_client.stop
71
+ Marvin::Settings.default_client.stop if self.type == :client
55
72
  self.stop_hooks.each { |h| h.call }
56
73
  Marvin::DataStore.dump!
57
74
  end
58
75
 
59
- def self.run!
76
+ def self.run!(type = :client)
77
+ self.type = type.to_sym
60
78
  self.new.run!
61
79
  end
62
80
 
@@ -1,5 +1,3 @@
1
- require 'logger'
2
-
3
1
  module Marvin
4
2
  class Logger
5
3
 
@@ -9,7 +7,7 @@ module Marvin
9
7
 
10
8
  def setup
11
9
  log_path = Marvin::Settings.root / "log/#{Marvin::Settings.environment}.log"
12
- self.logger ||= ::Logger.new(Marvin::Settings.daemon? ? log_path : STDOUT)
10
+ self.logger ||= new(log_path, Marvin::Settings.log_level, Marvin::Settings.verbose)
13
11
  end
14
12
 
15
13
  def method_missing(name, *args, &blk)
@@ -19,5 +17,70 @@ module Marvin
19
17
 
20
18
  end
21
19
 
20
+
21
+ LEVELS = {
22
+ :fatal => 7,
23
+ :error => 6,
24
+ :warn => 4,
25
+ :info => 3,
26
+ :debug => 0
27
+ }
28
+
29
+ PREFIXES = {}
30
+
31
+ LEVELS.each { |k,v| PREFIXES[k] = "[#{k.to_s.upcase}]".ljust 7 }
32
+
33
+ COLOURS = {
34
+ :fatal => 31, # red
35
+ :error => 33, # yellow
36
+ :warn => 35, # magenta
37
+ :info => 32, # green
38
+ :debug => 34 # white
39
+ }
40
+
41
+ attr_accessor :level, :file, :verbose
42
+
43
+ def initialize(path, level = :info, verbose = false)
44
+ self.level = level.to_sym
45
+ self.verbose = verbose
46
+ self.file = File.open(path, "a+")
47
+ end
48
+
49
+ def close!
50
+ self.file.close
51
+ end
52
+
53
+ LEVELS.each do |name, value|
54
+
55
+ define_method(name) do |message|
56
+ write "#{PREFIXES[name]} #{message}", name if LEVELS[self.level] <= value
57
+ end
58
+
59
+ define_method(:"#{name}?") do
60
+ LEVELS[self.level] <= value
61
+ end
62
+ end
63
+
64
+ def debug_exception(exception)
65
+
66
+ error "Exception: #{exception}"
67
+ exception.backtrace.each do |l|
68
+ error ">> #{l}"
69
+ end
70
+
71
+ end
72
+
73
+ private
74
+
75
+ def write(message, level = self.level)
76
+ self.file.puts message
77
+ STDOUT.puts colourize(message, level) if self.verbose
78
+ end
79
+
80
+ def colourize(message, level)
81
+ "\033[1;#{COLOURS[level]}m#{message}\033[0m"
82
+ end
83
+
84
+
22
85
  end
23
86
  end
@@ -0,0 +1,33 @@
1
+ require 'optparse'
2
+
3
+ module Marvin
4
+ class Options
5
+
6
+ def self.parse!
7
+ options = {
8
+ :verbose => Marvin::Settings.verbose,
9
+ :log_level => Marvin::Settings.log_level.to_s
10
+ }
11
+
12
+ ARGV.options do |o|
13
+ script_name = File.basename($0)
14
+ o.set_summary_indent(' ')
15
+ o.banner = "Usage: #{script_name} [OPTIONS]"
16
+ o.define_head "Ruby IRC Library"
17
+ o.separator ""
18
+ o.separator ""
19
+ o.on("-l", "--level=[level]", String, "The log level to use",
20
+ "Default: #{options[:log_level]}") {|options[:log_level]|}
21
+ o.on("-v", "--verbose", "Be verbose (print to stdout)") {|options[:verbose]|}
22
+ o.separator ""
23
+ o.on_tail("-h", "--help", "Show this message.") { puts o; exit }
24
+
25
+ o.parse!
26
+ end
27
+
28
+ Marvin::Settings.log_level = options[:log_level].to_sym
29
+ Marvin::Settings.verbose = options[:verbose]
30
+ end
31
+
32
+ end
33
+ end
@@ -3,5 +3,8 @@ module Marvin
3
3
  # Default Parsers
4
4
  autoload :RegexpParser, 'marvin/parsers/regexp_parser'
5
5
  autoload :SimpleParser, 'marvin/parsers/simple_parser'
6
+ autoload :Prefixes, 'marvin/parsers/prefixes'
7
+ autoload :Command, 'marvin/parsers/command'
8
+ autoload :RagelParser, 'marvin/parsers/ragel_parser'
6
9
  end
7
10
  end
@@ -0,0 +1,105 @@
1
+ module Marvin
2
+ module Parsers
3
+ # A single incoming / outgoing irc command,
4
+ # with handy utilities to convert it to a
5
+ # Marvin::IRC::Event instance.
6
+ class Command
7
+
8
+ @@commands = {}
9
+
10
+ attr_accessor :raw, :prefix, :code, :params
11
+
12
+ # Create a new command from the given raw
13
+ # message.
14
+ def initialize(raw)
15
+ self.raw = raw
16
+ self.params = []
17
+ end
18
+
19
+ # From the given command and arguments / params,
20
+ # attempt to recognize the command and convert
21
+ # it to an event which can be used for other stuff.
22
+ def to_event
23
+ if self.code =~ /^\d+$/
24
+ ev = @@commands[:numeric].dup
25
+ data = @params[0..-2]
26
+ data << "#{@params.last.include?(" ") ? ":" : ""}#{@params.last}"
27
+ ev.raw_arguments = [self.code.to_s, data.join(" ")]
28
+ elsif code == "PRIVMSG" && params.last[0] == 1 && params.last[-1] == 1
29
+ if params.last[0..8] == "\001ACTION: "
30
+ name, value = :action, params.last[9..-2]
31
+ else
32
+ name, value = :ctcp, params.last[1..-2]
33
+ end
34
+ self.params[-1] = value
35
+ ev = @@commands[name].dup
36
+ ev.raw_arguments = self.params
37
+ else
38
+ ev = @@commands[self.code.to_sym]
39
+ return nil if ev.nil?
40
+ ev = ev.dup
41
+ ev.raw_arguments = self.params
42
+ end
43
+ ev.prefix = self.prefix
44
+ return ev
45
+ end
46
+
47
+ private
48
+
49
+ # Adds an event that can be processed
50
+ def self.register_event(name, command, *args)
51
+ @@commands[command.to_sym] = Marvin::IRC::Event.new(name, *args)
52
+ end
53
+
54
+ register_event :pass, :PASS, :password
55
+ register_event :user, :USER, :user, :mode, :unused, :real_name
56
+ register_event :oper, :OPER, :name, :password
57
+ register_event :service, :SERVICE, :nick, :reserved, :distribution, :type, :reserved, :info
58
+ register_event :squit, :SQUIT, :server, :comment
59
+ register_event :nick, :NICK, :new_nick
60
+ register_event :quit, :QUIT, :message
61
+ register_event :ping, :PING, :data, :server
62
+ register_event :pong, :PONG, :data, :server
63
+ register_event :join, :JOIN, :target, :key
64
+ register_event :invite, :INVITE, :target, :channel
65
+ register_event :message, :PRIVMSG, :target, :message
66
+ register_event :part, :PART, :target, :message
67
+ register_event :mode, :MODE, :target, :mode, :mode_params
68
+ register_event :kick, :KICK, :target, :channel, :reason
69
+ register_event :notice, :NOTICE, :target, :message
70
+ register_event :topic, :TOPIC, :target, :topic
71
+ register_event :names, :NAMES, :channel, :target
72
+ register_event :list, :LIST, :channel, :target
73
+ register_event :motd, :MOTD, :target
74
+ register_event :lusers, :LUSERS, :mask, :target
75
+ register_event :version, :VERSION, :target
76
+ register_event :links, :LINKS, :remote, :mask
77
+ register_event :connect, :CONNECT, :target, :port, :remote
78
+ register_event :trace, :TRACE, :target
79
+ register_event :admin, :ADMIN, :target
80
+ register_event :info, :INFO, :target
81
+ register_event :servlist, :SERVLIST, :mask, :type
82
+ register_event :squery, :SQUERY, :service_name, :text
83
+ register_event :who, :WHO, :mask, :o
84
+ register_event :whois, :WHOIS, :target, :mask
85
+ register_event :whowas, :WHOWAS, :nick, :count, :target
86
+ register_event :kill, :KILL, :nick, :reason
87
+ register_event :error, :ERROR, :message
88
+ register_event :away, :AWAY, :reason
89
+ register_event :rehash, :REHASH
90
+ register_event :die, :DIE
91
+ register_event :restart, :RESTART
92
+ register_event :summon, :SUMMON, :user, :target, :channel
93
+ register_event :users, :USERS, :target
94
+ register_event :wallops, :WALLOPS, :message
95
+ register_event :userhost, :USERHOST, :nick
96
+ register_event :ison, :ISON, :nick
97
+ # Add the default numeric event
98
+ register_event :numeric, :numeric, :code, :data
99
+ # And a few others reserved for special purposed
100
+ register_event :action, :action, :message
101
+ register_event :ctcp, :ctcp, :message
102
+
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,8 @@
1
+ module Marvin
2
+ module Parsers
3
+ module Prefixes
4
+ autoload :Server, 'marvin/parsers/prefixes/server'
5
+ autoload :HostMask, 'marvin/parsers/prefixes/host_mask'
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,30 @@
1
+ module Marvin
2
+ module Parsers
3
+ module Prefixes
4
+ # A Generic host mask prefix for a message.
5
+ class HostMask
6
+ attr_accessor :nickname, :user, :host
7
+
8
+ def initialize(nickname = nil, user = nil, host = nil)
9
+ self.nickname = nickname || ""
10
+ self.user = user || ""
11
+ self.host = host || ""
12
+ end
13
+
14
+ # Convert it to a usable hash.
15
+ def to_hash
16
+ {:nick => @nickname.freeze, :ident => @user.freeze, :host => @host.freeze}
17
+ end
18
+
19
+ # Converts it back to a nicer form / a string.
20
+ def to_s
21
+ str = ""
22
+ str << @nickname.to_s
23
+ str << "!#{@user}" unless @user.blank?
24
+ str << "@#{@host}" unless @host.blank?
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,24 @@
1
+ module Marvin
2
+ module Parsers
3
+ module Prefixes
4
+ # Generic server name prefix
5
+ class Server
6
+
7
+ attr_accessor :name
8
+
9
+ def initialize(name = nil)
10
+ self.name = name || ""
11
+ end
12
+
13
+ def to_hash
14
+ {:server => @name.freeze}
15
+ end
16
+
17
+ def to_s
18
+ @name.to_s
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,713 @@
1
+ # line 1 "lib/marvin/parsers/ragel_parser.rl"
2
+ # line 107 "lib/marvin/parsers/ragel_parser.rl"
3
+
4
+
5
+ module Marvin
6
+ module Parsers
7
+ class RagelParser < Marvin::AbstractParser
8
+
9
+
10
+ # line 11 "lib/marvin/parsers/ragel_parser.rb"
11
+ class << self
12
+ attr_accessor :_irc_actions
13
+ private :_irc_actions, :_irc_actions=
14
+ end
15
+ self._irc_actions = [
16
+ 0, 1, 1, 1, 2, 1, 4, 1,
17
+ 5, 1, 6, 1, 7, 1, 9, 1,
18
+ 12, 1, 17, 1, 18, 2, 0, 1,
19
+ 2, 1, 4, 2, 2, 7, 2, 3,
20
+ 4, 2, 8, 9, 2, 13, 17, 2,
21
+ 14, 18, 2, 15, 12, 2, 16, 12,
22
+ 2, 17, 18, 3, 10, 11, 12, 3,
23
+ 10, 11, 17, 3, 13, 15, 12, 3,
24
+ 14, 16, 12, 3, 15, 16, 12, 4,
25
+ 0, 1, 3, 4, 4, 13, 17, 14,
26
+ 18, 5, 13, 15, 14, 16, 12
27
+ ]
28
+
29
+ class << self
30
+ attr_accessor :_irc_key_offsets
31
+ private :_irc_key_offsets, :_irc_key_offsets=
32
+ end
33
+ self._irc_key_offsets = [
34
+ 0, 0, 7, 9, 11, 13, 14, 19,
35
+ 23, 28, 32, 37, 41, 46, 50, 55,
36
+ 59, 64, 68, 73, 77, 82, 86, 91,
37
+ 95, 100, 104, 109, 113, 118, 122, 127,
38
+ 131, 136, 140, 144, 147, 150, 153, 156,
39
+ 159, 171, 174, 180, 186, 194, 197, 204,
40
+ 214, 223, 228, 233, 245, 248, 256, 259,
41
+ 266, 276, 291, 301, 316, 322, 329, 335,
42
+ 342, 348, 355, 361, 368, 374, 381, 387,
43
+ 394, 400, 407, 414, 421, 428, 435, 442,
44
+ 449, 456, 463, 472, 479, 485, 493, 495,
45
+ 498, 500, 503, 505, 508, 511, 512, 515,
46
+ 516, 519, 520, 528, 536, 545, 554, 563,
47
+ 572, 581, 590, 599, 608, 617, 626, 635,
48
+ 644, 653, 662, 671, 680, 689, 692, 702,
49
+ 719, 736, 753, 770, 787, 804, 821, 838,
50
+ 855, 872, 889, 906, 923, 940, 957, 969
51
+ ]
52
+
53
+ class << self
54
+ attr_accessor :_irc_trans_keys
55
+ private :_irc_trans_keys, :_irc_trans_keys=
56
+ end
57
+ self._irc_trans_keys = [
58
+ 58, 48, 57, 65, 90, 97, 122, 48,
59
+ 57, 48, 57, 13, 32, 10, 0, 10,
60
+ 13, 32, 58, 0, 10, 13, 32, 0,
61
+ 10, 13, 32, 58, 0, 10, 13, 32,
62
+ 0, 10, 13, 32, 58, 0, 10, 13,
63
+ 32, 0, 10, 13, 32, 58, 0, 10,
64
+ 13, 32, 0, 10, 13, 32, 58, 0,
65
+ 10, 13, 32, 0, 10, 13, 32, 58,
66
+ 0, 10, 13, 32, 0, 10, 13, 32,
67
+ 58, 0, 10, 13, 32, 0, 10, 13,
68
+ 32, 58, 0, 10, 13, 32, 0, 10,
69
+ 13, 32, 58, 0, 10, 13, 32, 0,
70
+ 10, 13, 32, 58, 0, 10, 13, 32,
71
+ 0, 10, 13, 32, 58, 0, 10, 13,
72
+ 32, 0, 10, 13, 32, 58, 0, 10,
73
+ 13, 32, 0, 10, 13, 32, 58, 0,
74
+ 10, 13, 32, 0, 10, 13, 32, 58,
75
+ 0, 10, 13, 32, 0, 10, 13, 58,
76
+ 0, 10, 13, 0, 10, 13, 0, 10,
77
+ 13, 0, 10, 13, 0, 10, 13, 42,
78
+ 43, 48, 57, 65, 90, 91, 96, 97,
79
+ 122, 123, 125, 32, 46, 47, 48, 57,
80
+ 65, 90, 97, 122, 13, 32, 65, 90,
81
+ 97, 122, 32, 42, 48, 57, 65, 90,
82
+ 97, 122, 32, 46, 47, 42, 48, 57,
83
+ 65, 90, 97, 122, 32, 45, 46, 47,
84
+ 48, 57, 65, 90, 97, 122, 32, 33,
85
+ 43, 45, 64, 48, 57, 65, 125, 0,
86
+ 10, 13, 32, 64, 0, 10, 13, 32,
87
+ 64, 42, 48, 49, 57, 65, 70, 71,
88
+ 90, 97, 102, 103, 122, 32, 46, 47,
89
+ 32, 42, 48, 57, 65, 90, 97, 122,
90
+ 32, 46, 47, 42, 48, 57, 65, 90,
91
+ 97, 122, 32, 45, 46, 47, 48, 57,
92
+ 65, 90, 97, 122, 32, 45, 58, 46,
93
+ 47, 48, 57, 65, 70, 71, 90, 97,
94
+ 102, 103, 122, 32, 45, 46, 47, 48,
95
+ 57, 65, 90, 97, 122, 32, 45, 58,
96
+ 46, 47, 48, 57, 65, 70, 71, 90,
97
+ 97, 102, 103, 122, 48, 57, 65, 70,
98
+ 97, 102, 58, 48, 57, 65, 70, 97,
99
+ 102, 48, 57, 65, 70, 97, 102, 58,
100
+ 48, 57, 65, 70, 97, 102, 48, 57,
101
+ 65, 70, 97, 102, 58, 48, 57, 65,
102
+ 70, 97, 102, 48, 57, 65, 70, 97,
103
+ 102, 58, 48, 57, 65, 70, 97, 102,
104
+ 48, 57, 65, 70, 97, 102, 58, 48,
105
+ 57, 65, 70, 97, 102, 48, 57, 65,
106
+ 70, 97, 102, 58, 48, 57, 65, 70,
107
+ 97, 102, 48, 57, 65, 70, 97, 102,
108
+ 32, 48, 57, 65, 70, 97, 102, 48,
109
+ 49, 57, 65, 70, 97, 102, 58, 48,
110
+ 57, 65, 70, 97, 102, 48, 49, 57,
111
+ 65, 70, 97, 102, 58, 48, 57, 65,
112
+ 70, 97, 102, 48, 49, 57, 65, 70,
113
+ 97, 102, 58, 48, 57, 65, 70, 97,
114
+ 102, 48, 49, 57, 65, 70, 97, 102,
115
+ 58, 48, 57, 65, 70, 97, 102, 48,
116
+ 70, 102, 49, 57, 65, 69, 97, 101,
117
+ 58, 48, 57, 65, 70, 97, 102, 48,
118
+ 57, 65, 70, 97, 102, 46, 58, 48,
119
+ 57, 65, 70, 97, 102, 48, 57, 46,
120
+ 48, 57, 48, 57, 46, 48, 57, 48,
121
+ 57, 32, 48, 57, 32, 48, 57, 32,
122
+ 46, 48, 57, 46, 46, 48, 57, 46,
123
+ 46, 58, 48, 57, 65, 70, 97, 102,
124
+ 46, 58, 48, 57, 65, 70, 97, 102,
125
+ 58, 70, 102, 48, 57, 65, 69, 97,
126
+ 101, 58, 70, 102, 48, 57, 65, 69,
127
+ 97, 101, 58, 70, 102, 48, 57, 65,
128
+ 69, 97, 101, 32, 33, 43, 45, 64,
129
+ 48, 57, 65, 125, 32, 33, 43, 45,
130
+ 64, 48, 57, 65, 125, 32, 33, 43,
131
+ 45, 64, 48, 57, 65, 125, 32, 33,
132
+ 43, 45, 64, 48, 57, 65, 125, 32,
133
+ 33, 43, 45, 64, 48, 57, 65, 125,
134
+ 32, 33, 43, 45, 64, 48, 57, 65,
135
+ 125, 32, 33, 43, 45, 64, 48, 57,
136
+ 65, 125, 32, 33, 43, 45, 64, 48,
137
+ 57, 65, 125, 32, 33, 43, 45, 64,
138
+ 48, 57, 65, 125, 32, 33, 43, 45,
139
+ 64, 48, 57, 65, 125, 32, 33, 43,
140
+ 45, 64, 48, 57, 65, 125, 32, 33,
141
+ 43, 45, 64, 48, 57, 65, 125, 32,
142
+ 33, 43, 45, 64, 48, 57, 65, 125,
143
+ 32, 33, 43, 45, 64, 48, 57, 65,
144
+ 125, 32, 33, 64, 32, 45, 46, 47,
145
+ 48, 57, 65, 90, 97, 122, 32, 33,
146
+ 43, 45, 64, 46, 47, 48, 57, 65,
147
+ 90, 91, 96, 97, 122, 123, 125, 32,
148
+ 33, 43, 45, 64, 46, 47, 48, 57,
149
+ 65, 90, 91, 96, 97, 122, 123, 125,
150
+ 32, 33, 43, 45, 64, 46, 47, 48,
151
+ 57, 65, 90, 91, 96, 97, 122, 123,
152
+ 125, 32, 33, 43, 45, 64, 46, 47,
153
+ 48, 57, 65, 90, 91, 96, 97, 122,
154
+ 123, 125, 32, 33, 43, 45, 64, 46,
155
+ 47, 48, 57, 65, 90, 91, 96, 97,
156
+ 122, 123, 125, 32, 33, 43, 45, 64,
157
+ 46, 47, 48, 57, 65, 90, 91, 96,
158
+ 97, 122, 123, 125, 32, 33, 43, 45,
159
+ 64, 46, 47, 48, 57, 65, 90, 91,
160
+ 96, 97, 122, 123, 125, 32, 33, 43,
161
+ 45, 64, 46, 47, 48, 57, 65, 90,
162
+ 91, 96, 97, 122, 123, 125, 32, 33,
163
+ 43, 45, 64, 46, 47, 48, 57, 65,
164
+ 90, 91, 96, 97, 122, 123, 125, 32,
165
+ 33, 43, 45, 64, 46, 47, 48, 57,
166
+ 65, 90, 91, 96, 97, 122, 123, 125,
167
+ 32, 33, 43, 45, 64, 46, 47, 48,
168
+ 57, 65, 90, 91, 96, 97, 122, 123,
169
+ 125, 32, 33, 43, 45, 64, 46, 47,
170
+ 48, 57, 65, 90, 91, 96, 97, 122,
171
+ 123, 125, 32, 33, 43, 45, 64, 46,
172
+ 47, 48, 57, 65, 90, 91, 96, 97,
173
+ 122, 123, 125, 32, 33, 43, 45, 64,
174
+ 46, 47, 48, 57, 65, 90, 91, 96,
175
+ 97, 122, 123, 125, 32, 33, 43, 45,
176
+ 64, 46, 47, 48, 57, 65, 90, 91,
177
+ 96, 97, 122, 123, 125, 32, 33, 45,
178
+ 64, 46, 47, 48, 57, 65, 90, 97,
179
+ 122, 0
180
+ ]
181
+
182
+ class << self
183
+ attr_accessor :_irc_single_lengths
184
+ private :_irc_single_lengths, :_irc_single_lengths=
185
+ end
186
+ self._irc_single_lengths = [
187
+ 0, 1, 0, 0, 2, 1, 5, 4,
188
+ 5, 4, 5, 4, 5, 4, 5, 4,
189
+ 5, 4, 5, 4, 5, 4, 5, 4,
190
+ 5, 4, 5, 4, 5, 4, 5, 4,
191
+ 5, 4, 4, 3, 3, 3, 3, 3,
192
+ 2, 1, 0, 2, 2, 1, 1, 2,
193
+ 5, 5, 5, 2, 1, 2, 1, 1,
194
+ 2, 3, 2, 3, 0, 1, 0, 1,
195
+ 0, 1, 0, 1, 0, 1, 0, 1,
196
+ 0, 1, 1, 1, 1, 1, 1, 1,
197
+ 1, 1, 3, 1, 0, 2, 0, 1,
198
+ 0, 1, 0, 1, 1, 1, 1, 1,
199
+ 1, 1, 2, 2, 3, 3, 3, 5,
200
+ 5, 5, 5, 5, 5, 5, 5, 5,
201
+ 5, 5, 5, 5, 5, 3, 2, 5,
202
+ 5, 5, 5, 5, 5, 5, 5, 5,
203
+ 5, 5, 5, 5, 5, 5, 4, 0
204
+ ]
205
+
206
+ class << self
207
+ attr_accessor :_irc_range_lengths
208
+ private :_irc_range_lengths, :_irc_range_lengths=
209
+ end
210
+ self._irc_range_lengths = [
211
+ 0, 3, 1, 1, 0, 0, 0, 0,
212
+ 0, 0, 0, 0, 0, 0, 0, 0,
213
+ 0, 0, 0, 0, 0, 0, 0, 0,
214
+ 0, 0, 0, 0, 0, 0, 0, 0,
215
+ 0, 0, 0, 0, 0, 0, 0, 0,
216
+ 5, 1, 3, 2, 3, 1, 3, 4,
217
+ 2, 0, 0, 5, 1, 3, 1, 3,
218
+ 4, 6, 4, 6, 3, 3, 3, 3,
219
+ 3, 3, 3, 3, 3, 3, 3, 3,
220
+ 3, 3, 3, 3, 3, 3, 3, 3,
221
+ 3, 3, 3, 3, 3, 3, 1, 1,
222
+ 1, 1, 1, 1, 1, 0, 1, 0,
223
+ 1, 0, 3, 3, 3, 3, 3, 2,
224
+ 2, 2, 2, 2, 2, 2, 2, 2,
225
+ 2, 2, 2, 2, 2, 0, 4, 6,
226
+ 6, 6, 6, 6, 6, 6, 6, 6,
227
+ 6, 6, 6, 6, 6, 6, 4, 0
228
+ ]
229
+
230
+ class << self
231
+ attr_accessor :_irc_index_offsets
232
+ private :_irc_index_offsets, :_irc_index_offsets=
233
+ end
234
+ self._irc_index_offsets = [
235
+ 0, 0, 5, 7, 9, 12, 14, 20,
236
+ 25, 31, 36, 42, 47, 53, 58, 64,
237
+ 69, 75, 80, 86, 91, 97, 102, 108,
238
+ 113, 119, 124, 130, 135, 141, 146, 152,
239
+ 157, 163, 168, 173, 177, 181, 185, 189,
240
+ 193, 201, 204, 208, 213, 219, 222, 227,
241
+ 234, 242, 248, 254, 262, 265, 271, 274,
242
+ 279, 286, 296, 303, 313, 317, 322, 326,
243
+ 331, 335, 340, 344, 349, 353, 358, 362,
244
+ 367, 371, 376, 381, 386, 391, 396, 401,
245
+ 406, 411, 416, 423, 428, 432, 438, 440,
246
+ 443, 445, 448, 450, 453, 456, 458, 461,
247
+ 463, 466, 468, 474, 480, 487, 494, 501,
248
+ 509, 517, 525, 533, 541, 549, 557, 565,
249
+ 573, 581, 589, 597, 605, 613, 617, 624,
250
+ 636, 648, 660, 672, 684, 696, 708, 720,
251
+ 732, 744, 756, 768, 780, 792, 804, 813
252
+ ]
253
+
254
+ class << self
255
+ attr_accessor :_irc_indicies
256
+ private :_irc_indicies, :_irc_indicies=
257
+ end
258
+ self._irc_indicies = [
259
+ 2, 0, 3, 3, 1, 4, 1, 5,
260
+ 1, 6, 7, 1, 8, 1, 1, 1,
261
+ 1, 1, 10, 9, 1, 1, 12, 13,
262
+ 11, 1, 1, 1, 1, 10, 14, 1,
263
+ 1, 12, 16, 15, 1, 1, 1, 1,
264
+ 10, 17, 1, 1, 12, 19, 18, 1,
265
+ 1, 1, 1, 10, 20, 1, 1, 12,
266
+ 22, 21, 1, 1, 1, 1, 10, 23,
267
+ 1, 1, 12, 25, 24, 1, 1, 1,
268
+ 1, 10, 26, 1, 1, 12, 28, 27,
269
+ 1, 1, 1, 1, 10, 29, 1, 1,
270
+ 12, 31, 30, 1, 1, 1, 1, 10,
271
+ 32, 1, 1, 12, 34, 33, 1, 1,
272
+ 1, 1, 10, 35, 1, 1, 12, 37,
273
+ 36, 1, 1, 1, 1, 10, 38, 1,
274
+ 1, 12, 40, 39, 1, 1, 1, 1,
275
+ 10, 41, 1, 1, 12, 43, 42, 1,
276
+ 1, 1, 1, 10, 44, 1, 1, 12,
277
+ 46, 45, 1, 1, 1, 1, 10, 47,
278
+ 1, 1, 12, 49, 48, 1, 1, 1,
279
+ 1, 10, 50, 1, 1, 52, 53, 51,
280
+ 1, 1, 55, 56, 54, 1, 1, 58,
281
+ 57, 1, 1, 60, 59, 1, 1, 52,
282
+ 61, 1, 1, 63, 62, 1, 1, 12,
283
+ 64, 65, 66, 67, 68, 66, 68, 66,
284
+ 1, 69, 70, 1, 0, 3, 3, 1,
285
+ 6, 7, 71, 71, 1, 69, 72, 73,
286
+ 73, 73, 1, 69, 74, 1, 72, 73,
287
+ 73, 73, 1, 69, 73, 74, 73, 73,
288
+ 73, 1, 75, 76, 77, 77, 78, 77,
289
+ 77, 1, 1, 1, 1, 1, 1, 79,
290
+ 1, 1, 1, 1, 78, 79, 80, 81,
291
+ 82, 82, 83, 82, 83, 1, 75, 84,
292
+ 1, 75, 85, 86, 86, 86, 1, 75,
293
+ 87, 1, 85, 86, 86, 86, 1, 75,
294
+ 86, 87, 86, 86, 86, 1, 75, 83,
295
+ 88, 84, 82, 82, 83, 82, 83, 1,
296
+ 75, 83, 84, 83, 83, 83, 1, 75,
297
+ 83, 89, 84, 82, 82, 83, 82, 83,
298
+ 1, 90, 90, 90, 1, 91, 90, 90,
299
+ 90, 1, 92, 92, 92, 1, 93, 92,
300
+ 92, 92, 1, 94, 94, 94, 1, 95,
301
+ 94, 94, 94, 1, 96, 96, 96, 1,
302
+ 97, 96, 96, 96, 1, 98, 98, 98,
303
+ 1, 99, 98, 98, 98, 1, 100, 100,
304
+ 100, 1, 101, 100, 100, 100, 1, 102,
305
+ 102, 102, 1, 75, 102, 102, 102, 1,
306
+ 103, 90, 90, 90, 1, 104, 90, 90,
307
+ 90, 1, 105, 92, 92, 92, 1, 106,
308
+ 92, 92, 92, 1, 107, 94, 94, 94,
309
+ 1, 108, 94, 94, 94, 1, 109, 96,
310
+ 96, 96, 1, 110, 96, 96, 96, 1,
311
+ 111, 112, 112, 98, 98, 98, 1, 113,
312
+ 98, 98, 98, 1, 114, 100, 100, 1,
313
+ 115, 101, 116, 100, 100, 1, 117, 1,
314
+ 118, 119, 1, 120, 1, 121, 122, 1,
315
+ 123, 1, 75, 124, 1, 75, 125, 1,
316
+ 75, 1, 121, 126, 1, 121, 1, 118,
317
+ 127, 1, 118, 1, 115, 101, 128, 100,
318
+ 100, 1, 115, 101, 100, 100, 100, 1,
319
+ 99, 129, 129, 98, 98, 98, 1, 99,
320
+ 130, 130, 98, 98, 98, 1, 99, 111,
321
+ 111, 98, 98, 98, 1, 75, 76, 131,
322
+ 131, 78, 131, 131, 1, 75, 76, 132,
323
+ 132, 78, 132, 132, 1, 75, 76, 133,
324
+ 133, 78, 133, 133, 1, 75, 76, 134,
325
+ 134, 78, 134, 134, 1, 75, 76, 135,
326
+ 135, 78, 135, 135, 1, 75, 76, 136,
327
+ 136, 78, 136, 136, 1, 75, 76, 137,
328
+ 137, 78, 137, 137, 1, 75, 76, 138,
329
+ 138, 78, 138, 138, 1, 75, 76, 139,
330
+ 139, 78, 139, 139, 1, 75, 76, 140,
331
+ 140, 78, 140, 140, 1, 75, 76, 141,
332
+ 141, 78, 141, 141, 1, 75, 76, 142,
333
+ 142, 78, 142, 142, 1, 75, 76, 143,
334
+ 143, 78, 143, 143, 1, 75, 76, 144,
335
+ 144, 78, 144, 144, 1, 75, 76, 78,
336
+ 1, 69, 145, 70, 145, 145, 145, 1,
337
+ 146, 76, 77, 147, 78, 70, 147, 147,
338
+ 77, 147, 77, 1, 146, 76, 131, 148,
339
+ 78, 70, 148, 148, 131, 148, 131, 1,
340
+ 146, 76, 132, 149, 78, 70, 149, 149,
341
+ 132, 149, 132, 1, 146, 76, 133, 150,
342
+ 78, 70, 150, 150, 133, 150, 133, 1,
343
+ 146, 76, 134, 151, 78, 70, 151, 151,
344
+ 134, 151, 134, 1, 146, 76, 135, 152,
345
+ 78, 70, 152, 152, 135, 152, 135, 1,
346
+ 146, 76, 136, 153, 78, 70, 153, 153,
347
+ 136, 153, 136, 1, 146, 76, 137, 154,
348
+ 78, 70, 154, 154, 137, 154, 137, 1,
349
+ 146, 76, 138, 155, 78, 70, 155, 155,
350
+ 138, 155, 138, 1, 146, 76, 139, 156,
351
+ 78, 70, 156, 156, 139, 156, 139, 1,
352
+ 146, 76, 140, 157, 78, 70, 157, 157,
353
+ 140, 157, 140, 1, 146, 76, 141, 158,
354
+ 78, 70, 158, 158, 141, 158, 141, 1,
355
+ 146, 76, 142, 159, 78, 70, 159, 159,
356
+ 142, 159, 142, 1, 146, 76, 143, 160,
357
+ 78, 70, 160, 160, 143, 160, 143, 1,
358
+ 146, 76, 144, 161, 78, 70, 161, 161,
359
+ 144, 161, 144, 1, 146, 76, 145, 78,
360
+ 70, 145, 145, 145, 1, 1, 0
361
+ ]
362
+
363
+ class << self
364
+ attr_accessor :_irc_trans_targs
365
+ private :_irc_trans_targs, :_irc_trans_targs=
366
+ end
367
+ self._irc_trans_targs = [
368
+ 2, 0, 40, 43, 3, 4, 5, 6,
369
+ 135, 7, 38, 7, 5, 8, 9, 9,
370
+ 10, 11, 11, 12, 13, 13, 14, 15,
371
+ 15, 16, 17, 17, 18, 19, 19, 20,
372
+ 21, 21, 22, 23, 23, 24, 25, 25,
373
+ 26, 27, 27, 28, 29, 29, 30, 31,
374
+ 31, 32, 33, 33, 5, 34, 35, 5,
375
+ 36, 35, 5, 37, 5, 37, 39, 5,
376
+ 39, 41, 48, 118, 119, 42, 44, 43,
377
+ 45, 47, 46, 42, 49, 103, 51, 50,
378
+ 52, 57, 59, 58, 53, 54, 56, 55,
379
+ 74, 60, 61, 62, 63, 64, 65, 66,
380
+ 67, 68, 69, 70, 71, 72, 73, 75,
381
+ 76, 77, 78, 79, 80, 81, 82, 83,
382
+ 100, 84, 85, 86, 98, 87, 88, 96,
383
+ 89, 90, 94, 91, 92, 93, 95, 97,
384
+ 99, 101, 102, 104, 105, 106, 107, 108,
385
+ 109, 110, 111, 112, 113, 114, 115, 116,
386
+ 117, 118, 42, 120, 121, 122, 123, 124,
387
+ 125, 126, 127, 128, 129, 130, 131, 132,
388
+ 133, 134
389
+ ]
390
+
391
+ class << self
392
+ attr_accessor :_irc_trans_actions
393
+ private :_irc_trans_actions, :_irc_trans_actions=
394
+ end
395
+ self._irc_trans_actions = [
396
+ 33, 0, 0, 33, 13, 13, 55, 51,
397
+ 0, 81, 15, 67, 17, 15, 81, 67,
398
+ 15, 81, 67, 15, 81, 67, 15, 81,
399
+ 67, 15, 81, 67, 15, 81, 67, 15,
400
+ 81, 67, 15, 81, 67, 15, 81, 67,
401
+ 15, 81, 67, 15, 81, 67, 15, 81,
402
+ 67, 15, 81, 67, 48, 15, 63, 39,
403
+ 63, 45, 19, 81, 76, 67, 59, 36,
404
+ 42, 21, 30, 21, 71, 3, 1, 13,
405
+ 1, 1, 1, 11, 0, 5, 0, 7,
406
+ 9, 9, 9, 9, 9, 9, 9, 9,
407
+ 9, 9, 9, 9, 9, 9, 9, 9,
408
+ 9, 9, 9, 9, 9, 9, 9, 9,
409
+ 9, 9, 9, 9, 9, 9, 9, 9,
410
+ 9, 9, 9, 9, 9, 9, 9, 9,
411
+ 9, 9, 9, 9, 9, 9, 9, 9,
412
+ 9, 9, 9, 5, 5, 5, 5, 5,
413
+ 5, 5, 5, 5, 5, 5, 5, 5,
414
+ 5, 1, 27, 24, 24, 24, 24, 24,
415
+ 24, 24, 24, 24, 24, 24, 24, 24,
416
+ 24, 24
417
+ ]
418
+
419
+ class << self
420
+ attr_accessor :irc_start
421
+ end
422
+ self.irc_start = 1;
423
+ class << self
424
+ attr_accessor :irc_first_final
425
+ end
426
+ self.irc_first_final = 135;
427
+ class << self
428
+ attr_accessor :irc_error
429
+ end
430
+ self.irc_error = 0;
431
+
432
+ class << self
433
+ attr_accessor :irc_en_main
434
+ end
435
+ self.irc_en_main = 1;
436
+
437
+ # line 114 "lib/marvin/parsers/ragel_parser.rl"
438
+
439
+ private
440
+
441
+ def self.parse!(line)
442
+ data = "#{line.strip}\r\n"
443
+
444
+ p = 0;
445
+ pe = data.length
446
+ cs = 0
447
+
448
+ hostmask = nil
449
+ server = nil
450
+ code = nil
451
+ command = Marvin::Parsers::Command.new(data)
452
+
453
+
454
+ # line 462 "lib/marvin/parsers/ragel_parser.rb"
455
+ begin
456
+ p ||= 0
457
+ pe ||= data.length
458
+ cs = irc_start
459
+ end
460
+ # line 137 "lib/marvin/parsers/ragel_parser.rl"
461
+
462
+ # line 470 "lib/marvin/parsers/ragel_parser.rb"
463
+ begin
464
+ _klen, _trans, _keys, _acts, _nacts = nil
465
+ _goto_level = 0
466
+ _resume = 10
467
+ _eof_trans = 15
468
+ _again = 20
469
+ _test_eof = 30
470
+ _out = 40
471
+ while true
472
+ _trigger_goto = false
473
+ if _goto_level <= 0
474
+ if p == pe
475
+ _goto_level = _test_eof
476
+ next
477
+ end
478
+ if cs == 0
479
+ _goto_level = _out
480
+ next
481
+ end
482
+ end
483
+ if _goto_level <= _resume
484
+ _keys = _irc_key_offsets[cs]
485
+ _trans = _irc_index_offsets[cs]
486
+ _klen = _irc_single_lengths[cs]
487
+ _break_match = false
488
+
489
+ begin
490
+ if _klen > 0
491
+ _lower = _keys
492
+ _upper = _keys + _klen - 1
493
+
494
+ loop do
495
+ break if _upper < _lower
496
+ _mid = _lower + ( (_upper - _lower) >> 1 )
497
+
498
+ if data[p] < _irc_trans_keys[_mid]
499
+ _upper = _mid - 1
500
+ elsif data[p] > _irc_trans_keys[_mid]
501
+ _lower = _mid + 1
502
+ else
503
+ _trans += (_mid - _keys)
504
+ _break_match = true
505
+ break
506
+ end
507
+ end # loop
508
+ break if _break_match
509
+ _keys += _klen
510
+ _trans += _klen
511
+ end
512
+ _klen = _irc_range_lengths[cs]
513
+ if _klen > 0
514
+ _lower = _keys
515
+ _upper = _keys + (_klen << 1) - 2
516
+ loop do
517
+ break if _upper < _lower
518
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1)
519
+ if data[p] < _irc_trans_keys[_mid]
520
+ _upper = _mid - 2
521
+ elsif data[p] > _irc_trans_keys[_mid+1]
522
+ _lower = _mid + 2
523
+ else
524
+ _trans += ((_mid - _keys) >> 1)
525
+ _break_match = true
526
+ break
527
+ end
528
+ end # loop
529
+ break if _break_match
530
+ _trans += _klen
531
+ end
532
+ end while false
533
+ _trans = _irc_indicies[_trans]
534
+ cs = _irc_trans_targs[_trans]
535
+ if _irc_trans_actions[_trans] != 0
536
+ _acts = _irc_trans_actions[_trans]
537
+ _nacts = _irc_actions[_acts]
538
+ _acts += 1
539
+ while _nacts > 0
540
+ _nacts -= 1
541
+ _acts += 1
542
+ case _irc_actions[_acts - 1]
543
+ when 0 then
544
+ # line 4 "lib/marvin/parsers/ragel_parser.rl"
545
+ begin
546
+
547
+ server = Marvin::Parsers::Prefixes::Server.new
548
+ end
549
+ # line 4 "lib/marvin/parsers/ragel_parser.rl"
550
+ when 1 then
551
+ # line 8 "lib/marvin/parsers/ragel_parser.rl"
552
+ begin
553
+
554
+ server.name << data[p]
555
+ end
556
+ # line 8 "lib/marvin/parsers/ragel_parser.rl"
557
+ when 2 then
558
+ # line 12 "lib/marvin/parsers/ragel_parser.rl"
559
+ begin
560
+
561
+ command.prefix = server
562
+ end
563
+ # line 12 "lib/marvin/parsers/ragel_parser.rl"
564
+ when 3 then
565
+ # line 16 "lib/marvin/parsers/ragel_parser.rl"
566
+ begin
567
+
568
+ hostmask = Marvin::Parsers::Prefixes::HostMask.new
569
+ end
570
+ # line 16 "lib/marvin/parsers/ragel_parser.rl"
571
+ when 4 then
572
+ # line 20 "lib/marvin/parsers/ragel_parser.rl"
573
+ begin
574
+
575
+ hostmask.nickname << data[p]
576
+ end
577
+ # line 20 "lib/marvin/parsers/ragel_parser.rl"
578
+ when 5 then
579
+ # line 24 "lib/marvin/parsers/ragel_parser.rl"
580
+ begin
581
+
582
+ hostmask.user << data[p]
583
+ end
584
+ # line 24 "lib/marvin/parsers/ragel_parser.rl"
585
+ when 6 then
586
+ # line 28 "lib/marvin/parsers/ragel_parser.rl"
587
+ begin
588
+
589
+ hostmask.host << data[p]
590
+ end
591
+ # line 28 "lib/marvin/parsers/ragel_parser.rl"
592
+ when 7 then
593
+ # line 32 "lib/marvin/parsers/ragel_parser.rl"
594
+ begin
595
+
596
+ command.prefix = hostmask
597
+ end
598
+ # line 32 "lib/marvin/parsers/ragel_parser.rl"
599
+ when 8 then
600
+ # line 36 "lib/marvin/parsers/ragel_parser.rl"
601
+ begin
602
+
603
+ code = ""
604
+ end
605
+ # line 36 "lib/marvin/parsers/ragel_parser.rl"
606
+ when 9 then
607
+ # line 40 "lib/marvin/parsers/ragel_parser.rl"
608
+ begin
609
+
610
+ code << data[p]
611
+ end
612
+ # line 40 "lib/marvin/parsers/ragel_parser.rl"
613
+ when 10 then
614
+ # line 44 "lib/marvin/parsers/ragel_parser.rl"
615
+ begin
616
+
617
+ command.code = code
618
+ end
619
+ # line 44 "lib/marvin/parsers/ragel_parser.rl"
620
+ when 11 then
621
+ # line 48 "lib/marvin/parsers/ragel_parser.rl"
622
+ begin
623
+
624
+ params_1 = []
625
+ params_2 = []
626
+ end
627
+ # line 48 "lib/marvin/parsers/ragel_parser.rl"
628
+ when 12 then
629
+ # line 53 "lib/marvin/parsers/ragel_parser.rl"
630
+ begin
631
+
632
+ end
633
+ # line 53 "lib/marvin/parsers/ragel_parser.rl"
634
+ when 13 then
635
+ # line 56 "lib/marvin/parsers/ragel_parser.rl"
636
+ begin
637
+
638
+ params_1 << ""
639
+ end
640
+ # line 56 "lib/marvin/parsers/ragel_parser.rl"
641
+ when 14 then
642
+ # line 60 "lib/marvin/parsers/ragel_parser.rl"
643
+ begin
644
+
645
+ params_2 << ""
646
+ end
647
+ # line 60 "lib/marvin/parsers/ragel_parser.rl"
648
+ when 15 then
649
+ # line 64 "lib/marvin/parsers/ragel_parser.rl"
650
+ begin
651
+
652
+ params_1.last << data[p]
653
+ end
654
+ # line 64 "lib/marvin/parsers/ragel_parser.rl"
655
+ when 16 then
656
+ # line 68 "lib/marvin/parsers/ragel_parser.rl"
657
+ begin
658
+
659
+ params_2.last << data[p]
660
+ end
661
+ # line 68 "lib/marvin/parsers/ragel_parser.rl"
662
+ when 17 then
663
+ # line 72 "lib/marvin/parsers/ragel_parser.rl"
664
+ begin
665
+
666
+ command.params = params_1
667
+ end
668
+ # line 72 "lib/marvin/parsers/ragel_parser.rl"
669
+ when 18 then
670
+ # line 76 "lib/marvin/parsers/ragel_parser.rl"
671
+ begin
672
+
673
+ command.params = params_2
674
+ end
675
+ # line 76 "lib/marvin/parsers/ragel_parser.rl"
676
+ # line 684 "lib/marvin/parsers/ragel_parser.rb"
677
+ end # action switch
678
+ end
679
+ end
680
+ if _trigger_goto
681
+ next
682
+ end
683
+ end
684
+ if _goto_level <= _again
685
+ if cs == 0
686
+ _goto_level = _out
687
+ next
688
+ end
689
+ p += 1
690
+ if p != pe
691
+ _goto_level = _resume
692
+ next
693
+ end
694
+ end
695
+ if _goto_level <= _test_eof
696
+ end
697
+ if _goto_level <= _out
698
+ break
699
+ end
700
+ end
701
+ end
702
+ # line 138 "lib/marvin/parsers/ragel_parser.rl"
703
+
704
+ if cs >= irc_first_final
705
+ command
706
+ else
707
+ raise UnparseableMessage, "Failed to parse the message: #{input.inspect}"
708
+ end
709
+ end
710
+
711
+ end
712
+ end
713
+ end