jeffrafter-marvin 0.1.20081115 → 0.1.20081120

Sign up to get free protection for your applications and to get access to all the features.
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