]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
[core] unicode plugin that sets server encoding
authorMatthias H <apoc@sixserv.org>
Thu, 20 Feb 2014 22:28:09 +0000 (23:28 +0100)
committerMatthias H <apoc@sixserv.org>
Thu, 20 Feb 2014 22:28:09 +0000 (23:28 +0100)
lib/rbot/core/unicode.rb [new file with mode: 0644]

diff --git a/lib/rbot/core/unicode.rb b/lib/rbot/core/unicode.rb
new file mode 100644 (file)
index 0000000..b647147
--- /dev/null
@@ -0,0 +1,55 @@
+#-- vim:sw=2:et
+#++
+#
+# :title: Unicode plugin
+# To set the encoding of strings coming from the irc server.
+
+class UnicodePlugin < CoreBotModule
+  Config.register Config::BooleanValue.new('encoding.enable',
+    :default => true,
+    :desc => "Support for non-ascii charsets",
+    :on_change => Proc.new { |bot, v| reconfigure_filter(bot) })
+
+  Config.register Config::StringValue.new('encoding.charset',
+    :default => 'utf-8',
+    :desc => 'Server encoding.',
+    :on_change => Proc.new { |bot, v| reconfigure_filter(bot) })
+
+  class UnicodeFilter
+    def initialize(charset)
+      @charset = charset
+    end
+
+    def in(data)
+      data.force_encoding @charset if data
+    end
+
+    def out(data)
+      data
+    end
+  end
+
+
+  def initialize(*a)
+    super
+    self.class.reconfigure_filter(@bot)
+  end
+
+  def cleanup
+    debug "cleaning up encodings"
+    @bot.socket.filter = nil
+    super
+  end
+
+  def UnicodePlugin.reconfigure_filter(bot)
+    debug "configuring encodings"
+    charset = bot.config['encoding.charset']
+    if bot.config['encoding.enable']
+      bot.socket.filter = UnicodeFilter.new charset
+    else
+      bot.socket.filter = nil
+    end
+  end
+end
+
+UnicodePlugin.new