rabbit 0.9.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. data/Gemfile +9 -2
  2. data/Rakefile +11 -4
  3. data/TODO +0 -2
  4. data/bin/rabbirack +95 -0
  5. data/bin/rabbit +23 -2
  6. data/bin/rabbiter +9 -0
  7. data/data/locale/en/LC_MESSAGES/rabbit.mo +0 -0
  8. data/data/locale/fr/LC_MESSAGES/rabbit.mo +0 -0
  9. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  10. data/doc/_layouts/en.html +1 -1
  11. data/doc/_layouts/ja.html +1 -1
  12. data/doc/_layouts/skeleton.html +1 -1
  13. data/doc/_site/css/rabbit.css +41 -1
  14. data/doc/_site/en/development.html +2 -2
  15. data/doc/_site/en/faq.html +2 -2
  16. data/doc/_site/en/hiki.html +2 -2
  17. data/doc/_site/en/how-to-make/hiki.html +2 -2
  18. data/doc/_site/en/how-to-make/index.html +2 -2
  19. data/doc/_site/en/how-to-make/pdf.html +2 -2
  20. data/doc/_site/en/how-to-make/rd.html +2 -2
  21. data/doc/_site/en/how-to-make/theme.html +2 -2
  22. data/doc/_site/en/index.html +20 -20
  23. data/doc/_site/en/install/homebrew.html +6 -12
  24. data/doc/_site/en/install/index.html +5 -3
  25. data/doc/_site/en/install/macports.html +2 -2
  26. data/doc/_site/en/install/windows.html +2 -2
  27. data/doc/_site/en/news.html +172 -61
  28. data/doc/_site/en/rd.html +2 -2
  29. data/doc/_site/en/sample/hiki/rabbit.html +3 -3
  30. data/doc/_site/en/sample/index.html +2 -2
  31. data/doc/_site/en/sample/rd/rabbit.html +3 -3
  32. data/doc/_site/en/slides.html +2 -2
  33. data/doc/_site/en/usage.html +60 -60
  34. data/doc/_site/en/users.html +2 -2
  35. data/doc/_site/images/screenshots/en/blue-circle.png +0 -0
  36. data/doc/_site/images/screenshots/en/clear-blue-raw.png +0 -0
  37. data/doc/_site/images/screenshots/en/clear-blue.png +0 -0
  38. data/doc/_site/images/screenshots/en/cozmixng-raw.png +0 -0
  39. data/doc/_site/images/screenshots/en/cozmixng.png +0 -0
  40. data/doc/_site/images/screenshots/en/dark-gradation.png +0 -0
  41. data/doc/_site/images/screenshots/en/day-white.png +0 -0
  42. data/doc/_site/images/screenshots/en/debian.png +0 -0
  43. data/doc/_site/images/screenshots/en/green-circle.png +0 -0
  44. data/doc/_site/images/screenshots/en/night-black.png +0 -0
  45. data/doc/_site/images/screenshots/en/rabbit-raw.png +0 -0
  46. data/doc/_site/images/screenshots/en/rabbit.png +0 -0
  47. data/doc/_site/images/screenshots/en/ranguba-raw.png +0 -0
  48. data/doc/_site/images/screenshots/en/ranguba.png +0 -0
  49. data/doc/_site/images/screenshots/en/red-frame.png +0 -0
  50. data/doc/_site/images/screenshots/en/ruby-gnome2.png +0 -0
  51. data/doc/_site/images/screenshots/ja/blue-circle.png +0 -0
  52. data/doc/_site/images/screenshots/ja/clear-blue-raw.png +0 -0
  53. data/doc/_site/images/screenshots/ja/clear-blue.png +0 -0
  54. data/doc/_site/images/screenshots/ja/cozmixng-raw.png +0 -0
  55. data/doc/_site/images/screenshots/ja/cozmixng.png +0 -0
  56. data/doc/_site/images/screenshots/ja/dark-gradation.png +0 -0
  57. data/doc/_site/images/screenshots/ja/day-white.png +0 -0
  58. data/doc/_site/images/screenshots/ja/debian.png +0 -0
  59. data/doc/_site/images/screenshots/ja/green-circle.png +0 -0
  60. data/doc/_site/images/screenshots/ja/night-black.png +0 -0
  61. data/doc/_site/images/screenshots/ja/rabbit-raw.png +0 -0
  62. data/doc/_site/images/screenshots/ja/rabbit.png +0 -0
  63. data/doc/_site/images/screenshots/ja/ranguba-raw.png +0 -0
  64. data/doc/_site/images/screenshots/ja/ranguba.png +0 -0
  65. data/doc/_site/images/screenshots/ja/red-frame.png +0 -0
  66. data/doc/_site/images/screenshots/ja/ruby-gnome2.png +0 -0
  67. data/doc/_site/index.html.en +8 -2
  68. data/doc/_site/index.html.ja +8 -2
  69. data/doc/_site/ja/about.html +2 -2
  70. data/doc/_site/ja/development.html +2 -2
  71. data/doc/_site/ja/faq.html +25 -14
  72. data/doc/_site/ja/hiki.html +2 -2
  73. data/doc/_site/ja/how-to-make/hiki.html +2 -2
  74. data/doc/_site/ja/how-to-make/index.html +2 -2
  75. data/doc/_site/ja/how-to-make/pdf.html +2 -2
  76. data/doc/_site/ja/how-to-make/rd.html +2 -2
  77. data/doc/_site/ja/how-to-make/theme.html +2 -2
  78. data/doc/_site/ja/index.html +2 -2
  79. data/doc/_site/ja/install/homebrew.html +6 -12
  80. data/doc/_site/ja/install/index.html +5 -3
  81. data/doc/_site/ja/install/macports.html +3 -6
  82. data/doc/_site/ja/install/windows.html +2 -2
  83. data/doc/_site/ja/news.html +165 -61
  84. data/doc/_site/ja/rd.html +2 -2
  85. data/doc/_site/ja/sample/hiki/rabbit.html +3 -3
  86. data/doc/_site/ja/sample/index.html +2 -2
  87. data/doc/_site/ja/sample/rd/rabbit.html +3 -3
  88. data/doc/_site/ja/slides.html +2 -2
  89. data/doc/_site/ja/usage.html +60 -69
  90. data/doc/_site/ja/users.html +2 -2
  91. data/doc/css/rabbit.css +41 -1
  92. data/doc/en/index.rd +1 -1
  93. data/doc/en/install/homebrew.rd +2 -11
  94. data/doc/en/install/index.rd +2 -0
  95. data/doc/en/news.rd +117 -3
  96. data/doc/en/sample/hiki/rabbit.hiki +1 -1
  97. data/doc/en/sample/rd/rabbit.rd +1 -1
  98. data/doc/en/usage.rd +12 -17
  99. data/doc/images/screenshots/en/blue-circle.png +0 -0
  100. data/doc/images/screenshots/en/clear-blue-raw.png +0 -0
  101. data/doc/images/screenshots/en/clear-blue.png +0 -0
  102. data/doc/images/screenshots/en/cozmixng-raw.png +0 -0
  103. data/doc/images/screenshots/en/cozmixng.png +0 -0
  104. data/doc/images/screenshots/en/dark-gradation.png +0 -0
  105. data/doc/images/screenshots/en/day-white.png +0 -0
  106. data/doc/images/screenshots/en/debian.png +0 -0
  107. data/doc/images/screenshots/en/green-circle.png +0 -0
  108. data/doc/images/screenshots/en/night-black.png +0 -0
  109. data/doc/images/screenshots/en/rabbit-raw.png +0 -0
  110. data/doc/images/screenshots/en/rabbit.png +0 -0
  111. data/doc/images/screenshots/en/ranguba-raw.png +0 -0
  112. data/doc/images/screenshots/en/ranguba.png +0 -0
  113. data/doc/images/screenshots/en/red-frame.png +0 -0
  114. data/doc/images/screenshots/en/ruby-gnome2.png +0 -0
  115. data/doc/images/screenshots/ja/blue-circle.png +0 -0
  116. data/doc/images/screenshots/ja/clear-blue-raw.png +0 -0
  117. data/doc/images/screenshots/ja/clear-blue.png +0 -0
  118. data/doc/images/screenshots/ja/cozmixng-raw.png +0 -0
  119. data/doc/images/screenshots/ja/cozmixng.png +0 -0
  120. data/doc/images/screenshots/ja/dark-gradation.png +0 -0
  121. data/doc/images/screenshots/ja/day-white.png +0 -0
  122. data/doc/images/screenshots/ja/debian.png +0 -0
  123. data/doc/images/screenshots/ja/green-circle.png +0 -0
  124. data/doc/images/screenshots/ja/night-black.png +0 -0
  125. data/doc/images/screenshots/ja/rabbit-raw.png +0 -0
  126. data/doc/images/screenshots/ja/rabbit.png +0 -0
  127. data/doc/images/screenshots/ja/ranguba-raw.png +0 -0
  128. data/doc/images/screenshots/ja/ranguba.png +0 -0
  129. data/doc/images/screenshots/ja/red-frame.png +0 -0
  130. data/doc/images/screenshots/ja/ruby-gnome2.png +0 -0
  131. data/doc/index.html.en +6 -0
  132. data/doc/index.html.ja +6 -0
  133. data/doc/ja/faq.rd +21 -3
  134. data/doc/ja/install/homebrew.rd +2 -11
  135. data/doc/ja/install/index.rd +2 -0
  136. data/doc/ja/install/macports.rd +1 -6
  137. data/doc/ja/news.rd +109 -3
  138. data/doc/ja/sample/hiki/rabbit.hiki +1 -1
  139. data/doc/ja/sample/rd/rabbit.rd +1 -1
  140. data/doc/ja/usage.rd +11 -29
  141. data/lib/rabbit/canvas.rb +7 -4
  142. data/lib/rabbit/console.rb +1 -1
  143. data/lib/rabbit/div/main-i.erb +1 -1
  144. data/lib/rabbit/div/main.erb +1 -1
  145. data/lib/rabbit/element/base.rb +17 -1
  146. data/lib/rabbit/element/image.rb +1 -0
  147. data/lib/rabbit/element/preformatted.rb +8 -3
  148. data/lib/rabbit/element/syntax-highlighting.rb +15 -0
  149. data/lib/rabbit/element/text-renderer.rb +3 -3
  150. data/lib/rabbit/element/text.rb +0 -12
  151. data/lib/rabbit/element/title-slide.rb +1 -25
  152. data/lib/rabbit/formatter.rb +26 -6
  153. data/lib/rabbit/front.rb +10 -6
  154. data/lib/rabbit/html/template.erb +1 -1
  155. data/lib/rabbit/image.rb +1 -1
  156. data/lib/rabbit/keys.rb +70 -70
  157. data/lib/rabbit/middleware/config.ru +42 -0
  158. data/lib/rabbit/middleware/controller.rb +66 -0
  159. data/lib/rabbit/middleware/public/stylesheets/rabbirack.css +12 -0
  160. data/lib/rabbit/middleware/views/index.haml +13 -0
  161. data/lib/rabbit/middleware/views/layout.haml +8 -0
  162. data/lib/rabbit/parser/ext/aafigure.rb +1 -1
  163. data/lib/rabbit/parser/ext/blockdiag.rb +46 -0
  164. data/lib/rabbit/parser/ext/coderay.rb +66 -0
  165. data/lib/rabbit/parser/ext/emacs.rb +116 -0
  166. data/lib/rabbit/parser/ext/enscript.rb +15 -22
  167. data/lib/rabbit/parser/rd.rb +8 -2
  168. data/lib/rabbit/parser/rd/ext/block-verbatim.rb +53 -16
  169. data/lib/rabbit/parser/wiki.rb +3 -1
  170. data/lib/rabbit/parser/wiki/output.rb +28 -16
  171. data/lib/rabbit/rabbit.rb +7 -1
  172. data/lib/rabbit/renderer/display.rb +14 -2
  173. data/lib/rabbit/renderer/display/clutter-embed.rb +1 -1
  174. data/lib/rabbit/renderer/display/key-handler.rb +12 -12
  175. data/lib/rabbit/soap/base.rb +1 -1
  176. data/lib/rabbit/theme-browser.rb +2 -2
  177. data/lib/rabbit/theme/base/base.rb +7 -0
  178. data/lib/rabbit/theme/default-comment/default-comment.rb +9 -0
  179. data/lib/rabbit/theme/default-comment/property.rb +4 -0
  180. data/lib/rabbit/theme/default-item-mark-setup/default-item-mark-setup.rb +1 -1
  181. data/lib/rabbit/theme/default-slide/default-slide.rb +2 -2
  182. data/lib/rabbit/theme/default-text/default-text.rb +5 -0
  183. data/lib/rabbit/theme/default/default.rb +6 -7
  184. data/lib/rabbit/theme/footer-comment/footer-comment.rb +35 -8
  185. data/lib/rabbit/theme/pdf/pdf.rb +18 -0
  186. data/lib/rabbit/theme/rabbit-powered-by/rabbit-powered-by.rb +1 -1
  187. data/lib/rabbit/theme/syntax-highlighting/property.rb +4 -0
  188. data/lib/rabbit/theme/syntax-highlighting/syntax-highlighting.rb +139 -0
  189. data/lib/rabbit/theme/title-shadow/title-shadow.rb +1 -1
  190. data/lib/rabbit/theme/twitter-comment/twitter-comment.rb +1 -1
  191. data/lib/rabbit/twitter.rb +28 -4
  192. data/lib/rabbit/utils.rb +40 -12
  193. data/po/en/rabbit.po +175 -145
  194. data/po/fr/rabbit.po +180 -149
  195. data/po/ja/rabbit.po +176 -148
  196. data/po/rabbit.pot +175 -145
  197. data/sample/can_rabbit.rd +0 -21
  198. data/sample/rabbit-en.hiki +21 -2
  199. data/sample/rabbit-en.rd +42 -2
  200. data/sample/rabbit-implementation.rd +0 -5
  201. data/sample/rabbit.hiki +19 -16
  202. data/sample/rabbit.rd +42 -11
  203. data/sample/test.hiki +31 -0
  204. data/sample/test.rab +30 -0
  205. metadata +84 -58
  206. data/lib/rabbit/parser/ext/anthy.rb +0 -43
  207. data/lib/rabbit/parser/rd/ext/aafigure.rb +0 -18
  208. data/lib/rabbit/parser/rd/ext/anthy.rb +0 -29
  209. data/lib/rabbit/parser/rd/ext/enscript.rb +0 -24
  210. data/lib/rabbit/parser/rd/ext/tex.rb +0 -24
  211. data/lib/rabbit/source/rwiki.rb +0 -54
  212. data/lib/rabbit/theme/pdf-tortoise-and-hare/pdf-tortoise-and-hare.rb +0 -18
  213. data/lib/rabbit/theme/pdf-tortoise-and-hare/property.rb +0 -3
@@ -5,7 +5,15 @@ require "rabbit/parser/base"
5
5
  module Rabbit
6
6
  module Parser
7
7
  class RD < Base
8
+ end
9
+ end
10
+ end
11
+
12
+ require "rabbit/parser/rd/rd2rabbit-lib"
8
13
 
14
+ module Rabbit
15
+ module Parser
16
+ class RD
9
17
  push_loader(self)
10
18
  class << self
11
19
  def match?(source)
@@ -53,5 +61,3 @@ module Rabbit
53
61
  end
54
62
  end
55
63
  end
56
-
57
- require "rabbit/parser/rd/rd2rabbit-lib"
@@ -8,10 +8,12 @@ rescue LoadError
8
8
  end
9
9
  require 'rabbit/parser/rd/ext/base'
10
10
  require 'rabbit/parser/rd/ext/image'
11
- require 'rabbit/parser/rd/ext/enscript'
12
- require 'rabbit/parser/rd/ext/tex'
13
- require 'rabbit/parser/rd/ext/aafigure'
14
- require 'rabbit/parser/rd/ext/anthy'
11
+ require 'rabbit/parser/ext/enscript'
12
+ require 'rabbit/parser/ext/tex'
13
+ require 'rabbit/parser/ext/aafigure'
14
+ require 'rabbit/parser/ext/blockdiag'
15
+ require 'rabbit/parser/ext/coderay'
16
+ require 'rabbit/parser/ext/emacs'
15
17
 
16
18
  module Rabbit
17
19
  module Parser
@@ -19,10 +21,6 @@ module Rabbit
19
21
  module Ext
20
22
  class BlockVerbatim < Base
21
23
  include Image
22
- include Enscript
23
- include TeX
24
- include AAFigure
25
- include Anthy
26
24
  include GetText
27
25
 
28
26
  def default_ext_block_verbatim(label, source, content, visitor)
@@ -65,27 +63,66 @@ module Rabbit
65
63
  def ext_block_verb_enscript(label, source, content, visitor)
66
64
  return nil unless /^enscript (\w+)$/i =~ label
67
65
  lang = $1.downcase.untaint
68
- enscript_block(label, lang, source, content, visitor)
69
- end
70
66
 
71
- def ext_block_verb_anthy(label, source, content, visitor)
72
- return nil unless /^anthy$/i =~ label
73
- anthy_hiragana_to_kanji(label, source, content, visitor)
67
+ src, prop = parse_source(source)
68
+ logger = visitor.logger
69
+
70
+ result = nil
71
+ if Parser::Ext::Enscript.check_availability(lang, logger)
72
+ result = Parser::Ext::Enscript.highlight(lang, src, logger)
73
+ end
74
+ result || default_ext_block_verbatim(label, src, src, visitor)
74
75
  end
75
76
 
76
77
  def ext_block_verb_LaTeX(label, source, content, visitor)
77
78
  return nil unless /^LaTeX$/i =~ label
78
- make_image_by_LaTeX(source, visitor)
79
+ make_image_from_file(source, visitor) do |src_file_path, prop|
80
+ Parser::Ext::TeX.make_image_by_LaTeX(src_file_path, prop, visitor)
81
+ end
79
82
  end
80
83
 
81
84
  def ext_block_verb_mimeTeX(label, source, content, visitor)
82
85
  return nil unless /^mimeTeX$/i =~ label
83
- make_image_by_mimeTeX(source, visitor)
86
+ make_image_from_file(source, visitor) do |src_file_path, prop|
87
+ Parser::Ext::TeX.make_image_by_mimeTeX(src_file_path, prop,
88
+ visitor)
89
+ end
84
90
  end
85
91
 
86
92
  def ext_block_verb_aafigure(label, source, content, visitor)
87
93
  return nil unless /^aafigure$/i =~ label
88
- make_image_by_aafigure(source, visitor)
94
+ make_image_from_file(source, visitor) do |src_file_path, prop|
95
+ Parser::Ext::AAFigure.make_image(src_file_path, prop, visitor)
96
+ end
97
+ end
98
+
99
+ def ext_block_verb_blockdiag(label, source, content, visitor)
100
+ return nil unless /^blockdiag$/i =~ label
101
+ make_image_from_file(source, visitor) do |src_file_path, prop|
102
+ Parser::Ext::BlockDiag.make_image(src_file_path, prop, visitor)
103
+ end
104
+ end
105
+
106
+ def ext_block_verb_coderay(label, source, content, visitor)
107
+ return nil unless /^coderay (\w+)$/i =~ label
108
+ lang = $1.downcase.untaint
109
+
110
+ src, prop = parse_source(source)
111
+ logger = visitor.logger
112
+
113
+ result = Parser::Ext::CodeRay.highlight(lang, src, logger)
114
+ result || default_ext_block_verbatim(label, src, src, visitor)
115
+ end
116
+
117
+ def ext_block_verb_emacs(label, source, content, visitor)
118
+ return nil unless /^emacs(?:\s+(.+))?$/i =~ label
119
+ mode_line = $1.untaint
120
+
121
+ src, prop = parse_source(source)
122
+ logger = visitor.logger
123
+
124
+ result = Parser::Ext::Emacs.highlight(src, logger, mode_line)
125
+ result || default_ext_block_verbatim(label, src, src, visitor)
89
126
  end
90
127
 
91
128
  def ext_block_verb_rt(label, source, content, visitor)
@@ -13,7 +13,9 @@ module Rabbit
13
13
  unshift_loader(self)
14
14
  class << self
15
15
  def match?(source)
16
- /^!/.match(source.read[0, 500])
16
+ head = source.read[0, 500]
17
+ head.force_encoding("ASCII-8BIT") if head.respond_to?(:force_encoding)
18
+ /^!/.match(head)
17
19
  end
18
20
  end
19
21
 
@@ -6,7 +6,9 @@ require 'rabbit/parser/ext/image'
6
6
  require 'rabbit/parser/ext/enscript'
7
7
  require 'rabbit/parser/ext/tex'
8
8
  require 'rabbit/parser/ext/aafigure'
9
- require 'rabbit/parser/ext/anthy'
9
+ require 'rabbit/parser/ext/blockdiag'
10
+ require 'rabbit/parser/ext/coderay'
11
+ require 'rabbit/parser/ext/emacs'
10
12
  require 'rabbit/parser/ext/entity'
11
13
 
12
14
  module Rabbit
@@ -262,8 +264,8 @@ module Rabbit
262
264
  lang = info ? info.downcase : nil
263
265
  result = nil
264
266
 
265
- if lang and Ext::Enscript.check_availability(lang, @canvas.logger)
266
- result = Ext::Enscript.highlight(lang, contents, @canvas.logger)
267
+ if lang
268
+ result = Ext::CodeRay.highlight(lang, contents, @canvas.logger)
267
269
  end
268
270
 
269
271
  if result
@@ -453,21 +455,10 @@ module Rabbit
453
455
  end
454
456
  end
455
457
 
456
- def anthy(source)
457
- unless Ext::Anthy.available?
458
- @output.canvas.logger.warn(_("Anthy isn't available"))
459
- return nil
460
- end
461
-
462
- converted_source = Ext::Anthy.hiragana_to_kanji(source)
463
- converted_source =
464
- Ext::Escape.escape_meta_character(converted_source)
465
- Paragraph.new(Text.new(converted_source))
466
- end
467
-
468
458
  def LaTeX(source, props={})
469
459
  args = [@output.canvas, source]
470
460
  Ext::Image.make_image_from_file(*args) do |src_file_path|
461
+ props = Utils.stringify_hash_key(props)
471
462
  args = [src_file_path, props, @output.canvas]
472
463
  [Ext::TeX.make_image_by_LaTeX(*args), props]
473
464
  end
@@ -477,6 +468,7 @@ module Rabbit
477
468
  def mimeTeX(source, props={})
478
469
  args = [@output.canvas, source]
479
470
  Ext::Image.make_image_from_file(*args) do |src_file_path|
471
+ props = Utils.stringify_hash_key(props)
480
472
  args = [src_file_path, props, @output.canvas]
481
473
  [Ext::TeX.make_image_by_mimeTeX(*args), props]
482
474
  end
@@ -486,11 +478,31 @@ module Rabbit
486
478
  def aafigure(source, props={})
487
479
  args = [@output.canvas, source]
488
480
  Ext::Image.make_image_from_file(*args) do |src_file_path|
481
+ props = Utils.stringify_hash_key(props)
482
+ args = [src_file_path, props, @output.canvas]
483
+ [Ext::AAFigure.make_image(*args), props]
484
+ end
485
+ end
486
+
487
+ def blockdiag(source, props={})
488
+ args = [@output.canvas, source]
489
+ Ext::Image.make_image_from_file(*args) do |src_file_path|
490
+ props = Utils.stringify_hash_key(props)
489
491
  args = [src_file_path, props, @output.canvas]
490
- [Ext::AAFigure.make_image_by_aafigure(*args), props]
492
+ [Ext::BlockDiag.make_image(*args), props]
491
493
  end
492
494
  end
493
495
 
496
+ def coderay(lang, source)
497
+ logger = @output.canvas.logger
498
+ Ext::CodeRay.highlight(lang, source, logger)
499
+ end
500
+
501
+ def emacs(source, mode_line=nil)
502
+ logger = @output.canvas.logger
503
+ Ext::Emacs.highlight(source, logger, mode_line)
504
+ end
505
+
494
506
  def tag(name, value=nil)
495
507
  if value
496
508
  CustomTag.new(name, @output.text(value))
data/lib/rabbit/rabbit.rb CHANGED
@@ -8,7 +8,7 @@ require "rabbit/gettext"
8
8
 
9
9
  module Rabbit
10
10
 
11
- VERSION = "0.9.3"
11
+ VERSION = "1.0.0"
12
12
 
13
13
  TMP_DIR_NAME = ".tmp"
14
14
 
@@ -101,6 +101,12 @@ module Rabbit
101
101
  end
102
102
  end
103
103
 
104
+ class BlockDiagCanNotHandleError < ImageLoadWithExternalCommandError
105
+ def initialize(command, additional_info=nil)
106
+ super("blockdiag", command, additional_info)
107
+ end
108
+ end
109
+
104
110
  class UnknownPropertyError < Error
105
111
  attr_reader :name
106
112
  def initialize(name)
@@ -7,7 +7,11 @@ module Rabbit
7
7
 
8
8
  class << self
9
9
  @initialized = false
10
- def init
10
+ @preferred_class_name = nil
11
+ def init(options={})
12
+ if options.has_key?(:preferred_class_name)
13
+ @preferred_class_name = options[:preferred_class_name]
14
+ end
11
15
  unless @initialized
12
16
  @initialized = true
13
17
  dir = ::File.join("rabbit", "renderer", "display")
@@ -17,7 +21,15 @@ module Rabbit
17
21
 
18
22
  def new(*args, &block)
19
23
  init
20
- corresponding_class_under_module(self).new(*args, &block)
24
+ target_class = nil
25
+ if @preferred_class_name
26
+ if const_defined?(@preferred_class_name)
27
+ target_class = const_get(@preferred_class_name)
28
+ target_class = nil unless target_class.is_a?(Class)
29
+ end
30
+ end
31
+ target_class ||= corresponding_class_under_module(self)
32
+ target_class.new(*args, &block)
21
33
  end
22
34
  end
23
35
  end
@@ -27,7 +27,7 @@ module Rabbit
27
27
  class ClutterEmbed
28
28
  class << self
29
29
  def priority
30
- 200
30
+ 0
31
31
  end
32
32
  end
33
33
 
@@ -76,14 +76,14 @@ module Rabbit
76
76
  mod = mod.inject(no_mod) do |result, item|
77
77
  result | item
78
78
  end
79
- keys = (0..9).collect{|i| Gdk::Keyval.const_get("GDK_#{i}")}
79
+ keys = (0..9).collect{|i| Gdk::Keyval.const_get("GDK_KEY_#{i}")}
80
80
  set_keys(keys, mod) do |group, obj, val, modifier|
81
- index = calc_slide_number(val - Gdk::Keyval::GDK_0, modifier)
81
+ index = calc_slide_number(val - Gdk::Keyval::GDK_KEY_0, modifier)
82
82
  @canvas.activate("JumpTo") {index}
83
83
  end
84
- keys = (0..9).collect{|i| Gdk::Keyval.const_get("GDK_KP_#{i}")}
84
+ keys = (0..9).collect{|i| Gdk::Keyval.const_get("GDK_KEY_KP_#{i}")}
85
85
  set_keys(keys, mod) do |group, obj, val, modifier|
86
- index = calc_slide_number(val - Gdk::Keyval::GDK_KP_0, modifier)
86
+ index = calc_slide_number(val - Gdk::Keyval::GDK_KEY_KP_0, modifier)
87
87
  @canvas.activate("JumpTo") {index}
88
88
  end
89
89
  end
@@ -254,16 +254,16 @@ module Rabbit
254
254
 
255
255
  def set_key_press_event(widget)
256
256
  prev_keys = [
257
- Gdk::Keyval::GDK_Up,
258
- Gdk::Keyval::GDK_Left,
259
- Gdk::Keyval::GDK_KP_Up,
260
- Gdk::Keyval::GDK_KP_Left,
257
+ Gdk::Keyval::GDK_KEY_Up,
258
+ Gdk::Keyval::GDK_KEY_Left,
259
+ Gdk::Keyval::GDK_KEY_KP_Up,
260
+ Gdk::Keyval::GDK_KEY_KP_Left,
261
261
  ]
262
262
  next_keys = [
263
- Gdk::Keyval::GDK_Right,
264
- Gdk::Keyval::GDK_Down,
265
- Gdk::Keyval::GDK_KP_Right,
266
- Gdk::Keyval::GDK_KP_Down,
263
+ Gdk::Keyval::GDK_KEY_Right,
264
+ Gdk::Keyval::GDK_KEY_Down,
265
+ Gdk::Keyval::GDK_KEY_KP_Right,
266
+ Gdk::Keyval::GDK_KEY_KP_Down,
267
267
  ]
268
268
  widget.signal_connect("key_press_event") do |_widget, event|
269
269
  handled = true
@@ -1,6 +1,6 @@
1
1
  module Rabbit
2
2
  module SOAP
3
- NS = "http://www.cozmixng.org/ns/rabbit/0.0.1/"
3
+ NS = "http://rabbit-shockers.org/ns/rabbit/0.0.1/"
4
4
 
5
5
  module_function
6
6
  def element_name(name)
@@ -70,9 +70,9 @@ module Rabbit
70
70
  @window.signal_connect("key_press_event") do |widget, event|
71
71
  if event.state.control_mask?
72
72
  case event.keyval
73
- when Gdk::Keyval::GDK_q
73
+ when Gdk::Keyval::GDK_KEY_q
74
74
  @window.destroy
75
- when Gdk::Keyval::GDK_r
75
+ when Gdk::Keyval::GDK_KEY_r
76
76
  page.reload
77
77
  end
78
78
  end
@@ -1,3 +1,10 @@
1
+ @foreground = "black"
2
+ @background = "white"
3
+ @shadow_color = "#fff9"
4
+
5
+ set_foreground(@foreground)
6
+ set_background(@background)
7
+
1
8
  @xx_large_font_size = screen_size(15 * Pango::SCALE)
2
9
  @x_large_font_size = screen_size(11 * Pango::SCALE)
3
10
  @large_font_size = screen_size(7 * Pango::SCALE)
@@ -0,0 +1,9 @@
1
+ if canvas.comment_theme
2
+ include_theme(canvas.comment_theme)
3
+ else
4
+ if display? and canvas.renderer.widget.class.name == "Clutter::GtkEmbed"
5
+ include_theme("clutter-comment")
6
+ else
7
+ include_theme("footer-comment")
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ @category = N_("Toolkit")
2
+ @title = N_("DefaultComment")
3
+ @abstract = N_("Toolkit to set up default comment theme.")
4
+ @description = N_("Sets up default comment theme.")
@@ -17,7 +17,7 @@ def setup_default_item_mark_type(type, item, canvas, x, y, w, h, color)
17
17
  canvas.draw_circle(true, x, y, w, h, color)
18
18
  when "check", "dash"
19
19
  props = {
20
- "font_family" => @font_family,
20
+ "font-family" => @font_family,
21
21
  "weight" => "bold",
22
22
  "foreground" => canvas.make_color(color).to_gdk_format,
23
23
  }.merge(item.first.text_props)
@@ -44,9 +44,9 @@ match(Slide, HeadLine) do |headlines|
44
44
  slide = headline.slide
45
45
  headline.hide if slide.hide_title?
46
46
  color = slide["headline-color"]
47
- headline.prop_set("foreground", color) if color
47
+ headline.font("color", color) if color
48
48
  shadow_color = slide["headline-shadow-color"]
49
- headline["shadow-color"] = shadow_color if shadow_color
49
+ headline.font("shadow-color" => shadow_color) if shadow_color
50
50
  end
51
51
  end
52
52
 
@@ -77,6 +77,11 @@ match("**", PreformattedText) do |texts|
77
77
  set_font_family(texts, @monospace_font_family)
78
78
  end
79
79
 
80
+ match("**", SyntaxHighlightingText) do |texts|
81
+ texts.prop_set("size", @normal_font_size)
82
+ set_font_family(texts, @monospace_font_family)
83
+ end
84
+
80
85
  match("**", Keyword) do |texts|
81
86
  texts.prop_set("weight", "bold")
82
87
  end
@@ -1,5 +1,6 @@
1
- @default_foreground ||= "black"
2
- @default_background ||= "white"
1
+ @default_foreground ||= @foreground
2
+ @default_background ||= @background
3
+ @default_shadow_color ||= @shadow_color
3
4
 
4
5
  set_foreground(@default_foreground)
5
6
  set_background(@default_background)
@@ -29,8 +30,6 @@ include_theme("body-background-image")
29
30
 
30
31
  include_theme("tag")
31
32
 
32
- if display? and canvas.renderer.widget.class.name == "Clutter::GtkEmbed"
33
- include_theme("clutter-comment")
34
- else
35
- include_theme("footer-comment")
36
- end
33
+ include_theme("syntax-highlighting")
34
+
35
+ include_theme("default-comment")
@@ -2,12 +2,21 @@ theme_exit unless display?
2
2
 
3
3
  proc_name = "footer-comment"
4
4
 
5
+ @footer_comment_color ||= @foreground
6
+ @footer_comment_shadow_color ||= @shadow_color
5
7
  @footer_comment_props ||= {
6
- "size" => (@xx_small_font_size * 0.5).ceil,
8
+ "size" => (@x_small_font_size * 0.5).ceil,
7
9
  "font_family" => @font_family,
10
+ "color" => @footer_comment_color,
11
+ "shadow-color" => @footer_comment_shadow_color,
12
+ }
13
+ @footer_comment_padding ||= {
14
+ :left => 3 * @space,
15
+ :right => 3 * @space,
16
+ :bottom => (@space * 0.5).ceil,
8
17
  }
9
- @footer_comment_color ||= @default_foreground
10
18
  @footer_comment_min_display_time ||= 1
19
+ @footer_comment_keep_last_comment ||= false
11
20
 
12
21
  match(SlideElement) do |slides|
13
22
  slides.delete_post_draw_proc_by_name(proc_name)
@@ -17,8 +26,13 @@ match(SlideElement) do |slides|
17
26
 
18
27
  comments = []
19
28
  canvas.on_comment(proc_name) do |comment|
29
+ if comments.empty?
30
+ GLib::Timeout.add_seconds(@footer_comment_min_display_time) do
31
+ canvas.activate("Redraw")
32
+ not comments.empty?
33
+ end
34
+ end
20
35
  comments << comment
21
- canvas.activate("Redraw")
22
36
  end
23
37
 
24
38
  redraw_time = Time.now
@@ -29,16 +43,29 @@ match(SlideElement) do |slides|
29
43
  text = Text.new(ERB::Util.h(content.strip.gsub("\n", " ")))
30
44
  if Time.now - redraw_time > @footer_comment_min_display_time
31
45
  redraw_time = Time.now
32
- comments.shift if comments.size > 1
46
+ if @footer_comment_keep_last_comment
47
+ comments.shift if comments.size > 1
48
+ else
49
+ comments.shift
50
+ end
33
51
  end
34
- text.font @footer_comment_props
35
52
  set_font_family(text)
53
+ text.font @footer_comment_props
54
+ text.padding_with @footer_comment_padding
36
55
  text.compile(canvas, x, y, w, h)
37
- text.layout.set_width(w * Pango::SCALE)
56
+
57
+ # set horizontal
38
58
  text_x = x
59
+ text_w = w - text.padding_left - text.padding_right
60
+ text.compile(canvas, text_x, y, text_w, h)
61
+
62
+ # set vertical
39
63
  text_y = canvas.height - slide.margin_bottom - slide.padding_bottom
40
- text_y -= text.layout.pixel_size[1]
41
- canvas.draw_layout(text.layout, text_x, text_y, @footer_comment_color)
64
+ text_y -= text.height
65
+ text_h = h - text.height
66
+ text.compile(canvas, text_x, text_y, text_w, text_h)
67
+
68
+ text.draw
42
69
  end
43
70
  end
44
71
  [x, y, w, h]