rabbit 1.0.8 → 1.0.9

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 (141) hide show
  1. data/Gemfile +1 -19
  2. data/Rakefile +7 -31
  3. data/doc/_layouts/en.html +1 -1
  4. data/doc/_layouts/ja.html +1 -1
  5. data/doc/en/news.rd +31 -0
  6. data/doc/index.html.en +1 -1
  7. data/doc/index.html.ja +1 -1
  8. data/doc/ja/news.rd +31 -0
  9. data/lib/rabbit/middleware/controller.rb +1 -5
  10. data/lib/rabbit/parser/rd/ext/character-reference.rb +59 -0
  11. data/lib/rabbit/parser/rd/ext/inline-verbatim.rb +2 -2
  12. data/lib/rabbit/parser/rd.rb +1 -1
  13. data/lib/rabbit/parser/wiki/output.rb +4 -0
  14. data/lib/rabbit/rabbit.rb +1 -1
  15. data/lib/rabbit/twitter.rb +43 -56
  16. data/misc/emacs/rabbit-mode.el +3 -4
  17. data/po/en/rabbit.po~ +2567 -0
  18. data/po/fr/rabbit.po~ +2674 -0
  19. data/po/ja/rabbit.po~ +2695 -0
  20. data/test/run-test.rb +2 -1
  21. metadata +737 -822
  22. data/TODO +0 -25
  23. data/doc/_site/css/jquery-ui/themes/ui-lightness.css +0 -573
  24. data/doc/_site/css/rabbit.css +0 -288
  25. data/doc/_site/en/development.html +0 -140
  26. data/doc/_site/en/faq.html +0 -117
  27. data/doc/_site/en/hiki.html +0 -420
  28. data/doc/_site/en/how-to-make/hiki.html +0 -113
  29. data/doc/_site/en/how-to-make/index.html +0 -136
  30. data/doc/_site/en/how-to-make/markdown.html +0 -156
  31. data/doc/_site/en/how-to-make/pdf.html +0 -111
  32. data/doc/_site/en/how-to-make/rd.html +0 -151
  33. data/doc/_site/en/how-to-make/theme.html +0 -249
  34. data/doc/_site/en/index.html +0 -357
  35. data/doc/_site/en/install/homebrew.html +0 -273
  36. data/doc/_site/en/install/index.html +0 -146
  37. data/doc/_site/en/install/macports.html +0 -158
  38. data/doc/_site/en/install/windows.html +0 -200
  39. data/doc/_site/en/news.html +0 -1253
  40. data/doc/_site/en/rd.html +0 -555
  41. data/doc/_site/en/sample/hiki/rabbit.html +0 -556
  42. data/doc/_site/en/sample/index.html +0 -121
  43. data/doc/_site/en/sample/markdown/rabbit.html +0 -490
  44. data/doc/_site/en/sample/rd/rabbit.html +0 -572
  45. data/doc/_site/en/slides.html +0 -113
  46. data/doc/_site/en/usage.html +0 -445
  47. data/doc/_site/en/users.html +0 -129
  48. data/doc/_site/favicon.ico +0 -0
  49. data/doc/_site/favicon.png +0 -0
  50. data/doc/_site/images/background-sample.svg +0 -290
  51. data/doc/_site/images/background.png +0 -0
  52. data/doc/_site/images/background.svg +0 -131
  53. data/doc/_site/images/hare-and-tortoise.png +0 -0
  54. data/doc/_site/images/hare-and-tortoise.svg +0 -541
  55. data/doc/_site/images/jp.png +0 -0
  56. data/doc/_site/images/lavie-icon.png +0 -0
  57. data/doc/_site/images/lavie.png +0 -0
  58. data/doc/_site/images/screenshots/en/blue-circle-raw.png +0 -0
  59. data/doc/_site/images/screenshots/en/blue-circle.png +0 -0
  60. data/doc/_site/images/screenshots/en/clear-blue-raw.png +0 -0
  61. data/doc/_site/images/screenshots/en/clear-blue.png +0 -0
  62. data/doc/_site/images/screenshots/en/cozmixng-raw.png +0 -0
  63. data/doc/_site/images/screenshots/en/cozmixng.png +0 -0
  64. data/doc/_site/images/screenshots/en/dark-gradation-raw.png +0 -0
  65. data/doc/_site/images/screenshots/en/dark-gradation.png +0 -0
  66. data/doc/_site/images/screenshots/en/day-white-raw.png +0 -0
  67. data/doc/_site/images/screenshots/en/day-white.png +0 -0
  68. data/doc/_site/images/screenshots/en/debian-raw.png +0 -0
  69. data/doc/_site/images/screenshots/en/debian.png +0 -0
  70. data/doc/_site/images/screenshots/en/green-circle-raw.png +0 -0
  71. data/doc/_site/images/screenshots/en/green-circle.png +0 -0
  72. data/doc/_site/images/screenshots/en/night-black-raw.png +0 -0
  73. data/doc/_site/images/screenshots/en/night-black.png +0 -0
  74. data/doc/_site/images/screenshots/en/rabbit-raw.png +0 -0
  75. data/doc/_site/images/screenshots/en/rabbit.png +0 -0
  76. data/doc/_site/images/screenshots/en/ranguba-raw.png +0 -0
  77. data/doc/_site/images/screenshots/en/ranguba.png +0 -0
  78. data/doc/_site/images/screenshots/en/red-frame-raw.png +0 -0
  79. data/doc/_site/images/screenshots/en/red-frame.png +0 -0
  80. data/doc/_site/images/screenshots/en/ruby-gnome2-raw.png +0 -0
  81. data/doc/_site/images/screenshots/en/ruby-gnome2.png +0 -0
  82. data/doc/_site/images/screenshots/en/rubykaigi2011-raw.png +0 -0
  83. data/doc/_site/images/screenshots/en/rubykaigi2011.png +0 -0
  84. data/doc/_site/images/screenshots/ja/blue-circle-raw.png +0 -0
  85. data/doc/_site/images/screenshots/ja/blue-circle.png +0 -0
  86. data/doc/_site/images/screenshots/ja/clear-blue-raw.png +0 -0
  87. data/doc/_site/images/screenshots/ja/clear-blue.png +0 -0
  88. data/doc/_site/images/screenshots/ja/cozmixng-raw.png +0 -0
  89. data/doc/_site/images/screenshots/ja/cozmixng.png +0 -0
  90. data/doc/_site/images/screenshots/ja/dark-gradation-raw.png +0 -0
  91. data/doc/_site/images/screenshots/ja/dark-gradation.png +0 -0
  92. data/doc/_site/images/screenshots/ja/day-white-raw.png +0 -0
  93. data/doc/_site/images/screenshots/ja/day-white.png +0 -0
  94. data/doc/_site/images/screenshots/ja/debian-raw.png +0 -0
  95. data/doc/_site/images/screenshots/ja/debian.png +0 -0
  96. data/doc/_site/images/screenshots/ja/green-circle-raw.png +0 -0
  97. data/doc/_site/images/screenshots/ja/green-circle.png +0 -0
  98. data/doc/_site/images/screenshots/ja/night-black-raw.png +0 -0
  99. data/doc/_site/images/screenshots/ja/night-black.png +0 -0
  100. data/doc/_site/images/screenshots/ja/rabbit-raw.png +0 -0
  101. data/doc/_site/images/screenshots/ja/rabbit.png +0 -0
  102. data/doc/_site/images/screenshots/ja/ranguba-raw.png +0 -0
  103. data/doc/_site/images/screenshots/ja/ranguba.png +0 -0
  104. data/doc/_site/images/screenshots/ja/red-frame-raw.png +0 -0
  105. data/doc/_site/images/screenshots/ja/red-frame.png +0 -0
  106. data/doc/_site/images/screenshots/ja/ruby-gnome2-raw.png +0 -0
  107. data/doc/_site/images/screenshots/ja/ruby-gnome2.png +0 -0
  108. data/doc/_site/images/screenshots/ja/rubykaigi2011-raw.png +0 -0
  109. data/doc/_site/images/screenshots/ja/rubykaigi2011.png +0 -0
  110. data/doc/_site/images/us.png +0 -0
  111. data/doc/_site/index.html.en +0 -132
  112. data/doc/_site/index.html.ja +0 -132
  113. data/doc/_site/ja/about.html +0 -120
  114. data/doc/_site/ja/development.html +0 -141
  115. data/doc/_site/ja/faq.html +0 -243
  116. data/doc/_site/ja/hiki.html +0 -416
  117. data/doc/_site/ja/how-to-make/hiki.html +0 -113
  118. data/doc/_site/ja/how-to-make/index.html +0 -136
  119. data/doc/_site/ja/how-to-make/markdown.html +0 -161
  120. data/doc/_site/ja/how-to-make/pdf.html +0 -112
  121. data/doc/_site/ja/how-to-make/rd.html +0 -161
  122. data/doc/_site/ja/how-to-make/theme.html +0 -254
  123. data/doc/_site/ja/index.html +0 -364
  124. data/doc/_site/ja/install/homebrew.html +0 -273
  125. data/doc/_site/ja/install/index.html +0 -148
  126. data/doc/_site/ja/install/macports.html +0 -174
  127. data/doc/_site/ja/install/windows.html +0 -200
  128. data/doc/_site/ja/news.html +0 -1243
  129. data/doc/_site/ja/rd.html +0 -565
  130. data/doc/_site/ja/sample/hiki/rabbit.html +0 -566
  131. data/doc/_site/ja/sample/index.html +0 -121
  132. data/doc/_site/ja/sample/markdown/rabbit.html +0 -485
  133. data/doc/_site/ja/sample/rd/rabbit.html +0 -580
  134. data/doc/_site/ja/slides.html +0 -142
  135. data/doc/_site/ja/usage.html +0 -449
  136. data/doc/_site/ja/users.html +0 -332
  137. data/doc/_site/javascripts/jquery-ui.js +0 -11544
  138. data/doc/_site/javascripts/jquery.js +0 -7179
  139. data/doc/_site/screenshot.en.rab +0 -10
  140. data/doc/_site/screenshot.ja.rab +0 -10
  141. data/lib/rabbit/parser/rd/ext/entity.rb +0 -38
data/Gemfile CHANGED
@@ -2,22 +2,4 @@
2
2
 
3
3
  source "http://rubygems.org"
4
4
 
5
- gem 'gtk2'
6
- gem 'rsvg2'
7
- gem 'poppler'
8
- gem 'hikidoc'
9
- gem 'nokogiri'
10
- gem "sinatra"
11
- gem "haml"
12
- gem "rdtool"
13
- gem "coderay", ">= 1.0.0"
14
- gem "kramdown"
15
-
16
- group :development, :test do
17
- gem 'twitter-stream'
18
- gem 'twitter_oauth'
19
- gem 'rake'
20
- gem 'jeweler'
21
- gem 'jekyll'
22
- gem 'gettext'
23
- end
5
+ gemspec
data/Rakefile CHANGED
@@ -1,9 +1,9 @@
1
1
  # -*- ruby -*-
2
2
 
3
- require 'find'
4
- require 'rubygems'
5
- require 'rubygems/package_task'
6
- require 'jeweler'
3
+ require "find"
4
+ require "rubygems"
5
+ require "rubygems/package_task"
6
+ require "bundler/gem_helper"
7
7
 
8
8
  base_dir = File.expand_path(File.dirname(__FILE__))
9
9
  $LOAD_PATH.unshift(File.join(base_dir, 'lib'))
@@ -11,33 +11,9 @@ require 'rabbit/rabbit'
11
11
 
12
12
  rsync_base_path = "rabbit@rabbit-shockers.org:public_html/"
13
13
 
14
- ENV["VERSION"] ||= Rabbit::VERSION
15
- version = ENV["VERSION"].dup
16
- spec = nil
17
- Jeweler::Tasks.new do |_spec|
18
- spec = _spec
19
- spec.name = "rabbit"
20
- spec.version = version.dup
21
- spec.rubyforge_project = "rabbit"
22
- spec.homepage = "http://rabbit-shockers.org/"
23
- spec.authors = ["Kouhei Sutou"]
24
- spec.email = ["kou@cozmixng.org"]
25
- spec.summary = 'Rabbit is an RD-document-based presentation application.'
26
- spec.description = spec.summary # FIXME
27
- spec.license = "GPLv2+"
28
-
29
- spec.files = FileList["{lib,data,entities,bin,sample,misc,doc,po}/**/*",
30
- "*.rb",
31
- "Rakefile",
32
- "COPYING",
33
- "GPL",
34
- "README",
35
- "Gemfile"]
36
- spec.test_files = FileList["test/**/*.rb"]
37
- end
38
-
39
- Rake::Task["release"].prerequisites.clear
40
- Jeweler::RubygemsDotOrgTasks.new
14
+ helper = Bundler::GemHelper.new(base_dir)
15
+ helper.install
16
+ spec = helper.gemspec
41
17
 
42
18
  def force_array(enumerable)
43
19
  array = []
data/doc/_layouts/en.html CHANGED
@@ -22,7 +22,7 @@ country: US
22
22
  {{ content }}
23
23
  <nav id="sidebar">
24
24
  <h3>The Latest Release</h3>
25
- <p><a href="en/news.html">1.0.7</a> is the latest release. It had been released at 2012-05-29.</p>
25
+ <p><a href="en/news.html">1.0.8</a> is the latest release. It had been released at 2012-06-17.</p>
26
26
  <h3>Links</h3>
27
27
  <ul>
28
28
  <li><a href="/en/">README</a></li>
data/doc/_layouts/ja.html CHANGED
@@ -22,7 +22,7 @@ country: JP
22
22
  {{ content }}
23
23
  <nav id="sidebar">
24
24
  <h3>最新リリース</h3>
25
- <p>2012-05-29にリリースされた<a href="/ja/news.html">1.0.7</a>が最新リリースです。</p>
25
+ <p>2012-06-17にリリースされた<a href="/ja/news.html">1.0.8</a>が最新リリースです。</p>
26
26
  <h3>リンク</h3>
27
27
  <ul>
28
28
  <li><a href="/ja/">はじめに</a></li>
data/doc/en/news.rd CHANGED
@@ -3,6 +3,37 @@ layout: en
3
3
  title: News
4
4
  apply_data: false
5
5
  ---
6
+ == 1.0.9: 2012-07-21
7
+
8
+ A bug fix release of 1.0.8.
9
+
10
+ === Improvements
11
+
12
+ ==== rabbit-mode.el
13
+
14
+ * Changed prefix for insert commands to ((%C-cC-i%)).
15
+
16
+ ==== rabbit
17
+
18
+ * Supported numeric character reference in RD and Hiki:
19
+
20
+ RD:
21
+ (('&#x1D11E;')) in hex
22
+ (('&#119070;')) in decimal
23
+
24
+ Hiki:
25
+ {{code_point(0x1d11e)}} in hex
26
+ {{code_point(119070)}} in decimal
27
+
28
+ ==== rabbirack
29
+
30
+ * Removed needless encoding change.
31
+
32
+ ==== rabbiter
33
+
34
+ * Supported twitter-stream 0.1.16. Earlier versions aren't supported.
35
+ * Re-implemented connection related codes by Ruby/GIO2.
36
+
6
37
  == 1.0.8: 2012-06-17
7
38
 
8
39
  A bug fix release of 1.0.7.
data/doc/index.html.en CHANGED
@@ -5,7 +5,7 @@ lang_suffix: true
5
5
  no_sidebar: true
6
6
  ---
7
7
  <div class="latest-release">
8
- <p><a href="/en/news.html">1.0.7</a> is the latest release. It had been released at 2012-05-29.</p>
8
+ <p><a href="/en/news.html">1.0.8</a> is the latest release. It had been released at 2012-06-17.</p>
9
9
  </div>
10
10
 
11
11
  <section class="screenshots">
data/doc/index.html.ja CHANGED
@@ -5,7 +5,7 @@ lang_suffix: true
5
5
  no_sidebar: true
6
6
  ---
7
7
  <div class="latest-release">
8
- <p>2012-05-29にリリースされた<a href="/ja/news.html">1.0.7</a>が最新リリースです。</p>
8
+ <p>2012-06-17にリリースされた<a href="/ja/news.html">1.0.8</a>が最新リリースです。</p>
9
9
  </div>
10
10
 
11
11
  <section class="screenshots">
data/doc/ja/news.rd CHANGED
@@ -3,6 +3,37 @@ layout: ja
3
3
  title: お知らせ
4
4
  apply_data: false
5
5
  ---
6
+ == 1.0.9: 2012-07-21
7
+
8
+ 1.0.8のバグフィックスリリース
9
+
10
+ === 改良
11
+
12
+ ==== rabbit-mode.el
13
+
14
+ * 挿入系のコマンドはprefixとして((%C-cC-i%))を使うように変更。
15
+
16
+ ==== rabbit
17
+
18
+ * RDとHikiで数値文字参照をサポート:
19
+
20
+ RD:
21
+ (('&#x1D11E;')) (8進数)
22
+ (('&#119070;')) (16進数)
23
+
24
+ Hiki:
25
+ {{code_point(0x1d11e)}} (8進数)
26
+ {{code_point(119070)}} (16進数)
27
+
28
+ ==== rabbirack
29
+
30
+ * 不必要なエンコーディングの変更をやめた。
31
+
32
+ ==== rabbiter
33
+
34
+ * twitter-stream 0.1.16対応。それ以前のバージョンはサポート対象外。
35
+ * Ruby/GIO2を使って通信するようにした。
36
+
6
37
  == 1.0.8: 2012-06-17
7
38
 
8
39
  1.0.7のバグフィックスリリース
@@ -56,11 +56,7 @@ module Rabbit
56
56
  end
57
57
 
58
58
  def slide_title
59
- current_slide_title = @rabbit.slide_title
60
- if current_slide_title.respond_to?(:force_encoding)
61
- current_slide_title.force_encoding("ASCII-8BIT")
62
- end
63
- current_slide_title
59
+ @rabbit.slide_title
64
60
  end
65
61
  end
66
62
  end
@@ -0,0 +1,59 @@
1
+ require 'rabbit/element'
2
+ require 'rabbit/parser/ext/entity'
3
+
4
+ module Rabbit
5
+ module Parser
6
+ class RD
7
+ module Ext
8
+ module CharacterReference
9
+ include Element
10
+
11
+ class << self
12
+ def included(mod)
13
+ self.instance_methods.each do |meth|
14
+ mod.method_added(meth)
15
+ end
16
+ end
17
+ end
18
+
19
+ TABLE = Parser::Ext::Entity::TABLE
20
+ def ext_inline_verb_character_entity_reference(label, source, content, visitor)
21
+ label = label.to_s
22
+ return nil unless /^&([^;]+);(.*)$/ =~ label
23
+ return nil unless TABLE.include?($1)
24
+
25
+ key = $1
26
+ rest = $2
27
+ if rest.empty?
28
+ Text.new(TABLE[key])
29
+ else
30
+ rest = visitor.apply_to_Verb(::RD::Verb.new(rest))
31
+ TextContainer.new([Text.new(TABLE[key]), rest])
32
+ end
33
+ end
34
+
35
+ def ext_inline_verb_numeric_character_reference(label, source, content, visitor)
36
+ label = label.to_s
37
+ return nil unless /^&#(x?)([a-zA-Z\d]+);(.*)$/ =~ label
38
+
39
+ base = $1
40
+ unicode_code_point_string = $2
41
+ rest = $3
42
+ if base == "x"
43
+ unicode_code_point = unicode_code_point_string.to_i(16)
44
+ else
45
+ unicode_code_point = unicode_code_point_string.to_i(10)
46
+ end
47
+ character = [unicode_code_point].pack("U")
48
+ if rest.empty?
49
+ Text.new(character)
50
+ else
51
+ rest = visitor.apply_to_Verb(::RD::Verb.new(rest))
52
+ TextContainer.new([Text.new(character), rest])
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -2,7 +2,7 @@ require 'rabbit/utils'
2
2
  require 'rabbit/parser/ext/inline'
3
3
  require 'rabbit/parser/rd/ext/base'
4
4
  require 'rabbit/parser/rd/ext/image'
5
- require 'rabbit/parser/rd/ext/entity'
5
+ require 'rabbit/parser/rd/ext/character-reference'
6
6
 
7
7
  module Rabbit
8
8
  module Parser
@@ -11,7 +11,7 @@ module Rabbit
11
11
  class InlineVerbatim < Base
12
12
  extend Utils
13
13
  include Image
14
- include Entity
14
+ include CharacterReference
15
15
 
16
16
  Inline = Parser::Ext::Inline
17
17
 
@@ -47,7 +47,7 @@ module Rabbit
47
47
  def add_number(source, around=nil)
48
48
  i = 1
49
49
  puts source
50
- lines = source.to_a[0..-2]
50
+ lines = source.lines.to_a[0..-2]
51
51
  if around
52
52
  i = [1, around - SNIPPET_SIZE].max
53
53
  lines = lines[i, 2 * SNIPPET_SIZE]
@@ -368,6 +368,10 @@ module Rabbit
368
368
  end
369
369
  alias_method :e, :entity
370
370
 
371
+ def code_point(code_point, *rest)
372
+ @private.pack(Text.new([code_point].pack("U")), *rest)
373
+ end
374
+
371
375
  def sub(text, *rest)
372
376
  super(@private.pack(text, *rest))
373
377
  end
data/lib/rabbit/rabbit.rb CHANGED
@@ -8,7 +8,7 @@ require "rabbit/gettext"
8
8
 
9
9
  module Rabbit
10
10
 
11
- VERSION = "1.0.8"
11
+ VERSION = "1.0.9"
12
12
 
13
13
  TMP_DIR_NAME = ".tmp"
14
14
 
@@ -1,5 +1,6 @@
1
- require 'shellwords'
2
- require 'pathname'
1
+ require "shellwords"
2
+ require "pathname"
3
+ require "gio2"
3
4
 
4
5
  module Rabbit
5
6
  class Twitter
@@ -49,8 +50,6 @@ module Rabbit
49
50
  register_listener(&block) if block_given?
50
51
  setup if @oauth_parameters.nil?
51
52
  return if @oauth_parameters.nil?
52
- require 'socket'
53
- require 'openssl'
54
53
  begin
55
54
  require 'twitter/json_stream'
56
55
  rescue LoadError
@@ -62,15 +61,13 @@ module Rabbit
62
61
  stream_options = {
63
62
  :oauth => @oauth_parameters,
64
63
  :user_agent => "Rabitter #{Rabbit::VERSION}",
65
- :host => "stream.twitter.com",
66
- :port => 443,
67
- :path => "/1/statuses/filter.json",
68
64
  :method => "POST",
69
- :ssl => true,
70
65
  :filters => filters,
71
66
  }
72
- @stream = ::Twitter::JSONStream.new(:signature, stream_options)
73
- @connection = GLibConnection.new(@logger, @stream, stream_options)
67
+ @stream = ::Twitter::JSONStream.allocate
68
+ @stream.send(:initialize, stream_options)
69
+ @stream.send(:reset_state)
70
+ @connection = GLibConnection.new(@logger, @stream)
74
71
 
75
72
  @stream.each_item do |item|
76
73
  status = JSON.parse(item)
@@ -120,40 +117,32 @@ module Rabbit
120
117
  end
121
118
 
122
119
  class GLibConnection
123
- def initialize(logger, handler, options)
120
+ def initialize(logger, handler)
124
121
  @logger = logger
125
- @options = options
126
122
  @handler = handler
127
- @tcp_socket = nil
128
- @ssl_socket = nil
129
- @channel = nil
123
+ @options = @handler.instance_variable_get("@options")
124
+ @client = nil
125
+ @connection = nil
126
+ @socket = nil
130
127
  @source_ids = []
131
128
  end
132
129
 
133
130
  def connect
134
131
  close
135
- @tcp_socket = TCPSocket.new(@options[:host], "https")
136
- @ssl_socket = OpenSSL::SSL::SSLSocket.new(@tcp_socket)
137
- @ssl_socket.sync_close = true
138
- @ssl_socket.connect
139
- if GLib.const_defined?(:IOChannelWin32Socket)
140
- @channel = GLib::IOChannelWin32Socket.new(@tcp_socket.fileno)
141
- else
142
- @channel = GLib::IOChannel.new(@tcp_socket.fileno)
143
- end
144
- begin
145
- @channel.flags = GLib::IOChannel::FLAG_NONBLOCK
146
- rescue GLib::IOChannelError
147
- @logger.warn("[twitter][read][error] " +
148
- "failed to set non-blocking mode: " +
149
- "#{$!.message}(#{$!.class})")
150
- end
151
- reader_id = @channel.add_watch(GLib::IOChannel::IN) do |io, condition|
132
+ @client = Gio::SocketClient.new
133
+ @client.tls = @options[:ssl]
134
+ @connection = @client.connect_to_host(@options[:host], @options[:port])
135
+ @socket = @connection.socket
136
+ @socket.blocking = false
137
+ @input = @connection.input_stream
138
+ @output = @connection.output_stream
139
+
140
+ reader_source = @socket.create_source(:in) do |socket, condition|
152
141
  @logger.debug("[twitter][read][start]")
153
- data = @ssl_socket.read(8192)
142
+ data = @input.read(8192) || ""
154
143
  @logger.debug("[twitter][read][done] #{data.bytesize}")
155
144
  if data.empty?
156
- @source_ids.reject! {|id| id == reader_id}
145
+ @source_ids.reject! {|id| id == reader_source.id}
157
146
  @logger.debug("[twitter][read][eof]")
158
147
  false
159
148
  else
@@ -161,12 +150,14 @@ module Rabbit
161
150
  true
162
151
  end
163
152
  end
164
- @source_ids << reader_id
165
- error_id = @channel.add_watch(GLib::IOChannel::ERR) do |io, condition|
153
+ @source_ids << reader_source.attach
154
+
155
+ error_source = @socket.create_source(:err) do |socket, condition|
166
156
  @handler.receive_error(condition)
167
157
  true
168
158
  end
169
- @source_ids << error_id
159
+ @source_ids << error_source.attach
160
+
170
161
  @handler.extend(GLibAdapter)
171
162
  @handler.connection = self
172
163
  @handler.connection_completed
@@ -174,41 +165,37 @@ module Rabbit
174
165
 
175
166
  def send_data(data)
176
167
  rest = data.bytesize
177
- writer_id = @channel.add_watch(GLib::IOChannel::OUT) do |io, condition|
168
+ writer_source = @socket.create_source(:out) do |socket, condition|
178
169
  if rest.zero?
179
170
  @logger.debug("[twitter][flush][start]")
180
- @ssl_socket.flush
171
+ @output.flush
181
172
  @logger.debug("[twitter][flush][done]")
182
- @source_ids.reject! {|id| id == writer_id}
173
+ @source_ids.reject! {|id| id == writer_source.id}
183
174
  false
184
175
  else
185
176
  @logger.debug("[twitter][write][start]")
186
- written_size = @ssl_socket.write(data)
187
- if written_size.is_a?(Numeric)
188
- @logger.debug("[twitter][write][done] #{written_size}")
189
- rest -= written_size
190
- data[0, written_size] = ""
191
- else
192
- # for Ruby/GLib2 < 0.90.9
193
- rest = 0
194
- data.replace("")
195
- end
177
+ written_size = @output.write(data)
178
+ @logger.debug("[twitter][write][done] #{written_size}")
179
+ rest -= written_size
180
+ data[0, written_size] = ""
196
181
  true
197
182
  end
198
183
  end
199
- @source_ids << writer_id
184
+ @source_ids << writer_source.attach
200
185
  end
201
186
 
202
187
  def close
203
- return if @ssl_socket.nil?
188
+ return if @client.nil?
204
189
  @source_ids.reject! do |id|
205
190
  GLib::Source.remove(id)
206
191
  true
207
192
  end
208
- @channel = nil
209
- @ssl_socket.close
210
- @tcp_socket = nil
211
- @ssl_socket = nil
193
+ @socket.close
194
+ @socket = nil
195
+ @input = nil
196
+ @output = nil
197
+ @connection = nil
198
+ @client = nil
212
199
  end
213
200
 
214
201
  def reconnect(options={})
@@ -237,10 +237,9 @@
237
237
  (defun rabbit-setup-keys ()
238
238
  "define default key bindings."
239
239
  (define-key rabbit-mode-map "\C-c\C-r" 'rabbit-run-rabbit)
240
- (define-key rabbit-mode-map "\C-c\C-t" 'rabbit-insert-title-template)
241
- (define-key rabbit-mode-map "\C-c\C-i" 'rabbit-insert-image-template-default)
242
- (define-key rabbit-mode-map "\C-ci" 'rabbit-insert-image-template)
243
- (define-key rabbit-mode-map "\C-c\C-s" 'rabbit-insert-slide)
240
+ (define-key rabbit-mode-map "\C-c\C-it" 'rabbit-insert-title-template)
241
+ (define-key rabbit-mode-map "\C-c\C-ii" 'rabbit-insert-image-template)
242
+ (define-key rabbit-mode-map "\C-c\C-is" 'rabbit-insert-slide)
244
243
  (define-key rabbit-mode-map "\C-c\C-d" 'rabbit-delete-slide)
245
244
  (define-key rabbit-mode-map "\M-n" 'rabbit-next-slide)
246
245
  (define-key rabbit-mode-map "\M-p" 'rabbit-previous-slide))