rabbit 1.0.8 → 1.0.9

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