rabbit 2.1.3 → 2.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/doc/_config.yml +2 -2
  3. data/doc/en/faq.rd +5 -5
  4. data/doc/en/install/windows.rd +4 -49
  5. data/doc/en/news.rd +96 -0
  6. data/doc/en/slides.rd +2 -0
  7. data/doc/en/usage/rabbit-slide.rd +1 -1
  8. data/doc/ja/faq.rd +37 -32
  9. data/doc/ja/how-to-make/theme.rd +50 -50
  10. data/doc/ja/index.rd +35 -35
  11. data/doc/ja/install/windows.rd +4 -46
  12. data/doc/ja/news.rd +127 -30
  13. data/doc/ja/sample/hiki/rabbit.hiki +4 -4
  14. data/doc/ja/usage/rabbit-slide.rd +8 -8
  15. data/doc/ja/usage/rabbit-theme.rd +7 -7
  16. data/doc/ja/usage/rabbit.rd +124 -124
  17. data/lib/rabbit/action/basic.rb +1 -1
  18. data/lib/rabbit/canvas.rb +19 -19
  19. data/lib/rabbit/command/rabbit-slide.rb +5 -4
  20. data/lib/rabbit/command/rabbit.rb +2 -1
  21. data/lib/rabbit/cursor-manager.rb +14 -14
  22. data/lib/rabbit/element/poppler-slide.rb +6 -0
  23. data/lib/rabbit/element/poppler-title-slide.rb +6 -0
  24. data/lib/rabbit/element/slide-element.rb +4 -0
  25. data/lib/rabbit/element/text-renderer.rb +1 -1
  26. data/lib/rabbit/formatter.rb +9 -9
  27. data/lib/rabbit/frame.rb +5 -5
  28. data/lib/rabbit/front.rb +2 -2
  29. data/lib/rabbit/graffiti/processor.rb +9 -9
  30. data/lib/rabbit/html/template.erb +1 -1
  31. data/lib/rabbit/image/default.rb +2 -2
  32. data/lib/rabbit/image/eps.rb +5 -5
  33. data/lib/rabbit/image/pdf.rb +1 -1
  34. data/lib/rabbit/image/svg.rb +1 -1
  35. data/lib/rabbit/logger/base.rb +5 -5
  36. data/lib/rabbit/logger/stderr.rb +4 -1
  37. data/lib/rabbit/menu.rb +4 -4
  38. data/lib/rabbit/parser/ext/aafigure.rb +6 -4
  39. data/lib/rabbit/parser/ext/blockdiag.rb +5 -3
  40. data/lib/rabbit/parser/ext/entity.rb +26 -26
  41. data/lib/rabbit/parser/markdown.rb +42 -0
  42. data/lib/rabbit/parser/markdown/converter.rb +115 -18
  43. data/lib/rabbit/parser/pdf.rb +1 -5
  44. data/lib/rabbit/parser/rd/rt/rt2rabbit-lib.rb +2 -2
  45. data/lib/rabbit/rabbit.rb +1 -1
  46. data/lib/rabbit/renderer/base.rb +15 -23
  47. data/lib/rabbit/renderer/color.rb +3 -3
  48. data/lib/rabbit/renderer/display/base.rb +81 -6
  49. data/lib/rabbit/renderer/display/clutter-embed.rb +1 -1
  50. data/lib/rabbit/renderer/display/drawing-area-base.rb +2 -2
  51. data/lib/rabbit/renderer/display/drawing-area-primitive.rb +1 -1
  52. data/lib/rabbit/renderer/engine/cairo.rb +1 -70
  53. data/lib/rabbit/renderer/kernel.rb +11 -19
  54. data/lib/rabbit/renderer/pixmap/base.rb +3 -3
  55. data/lib/rabbit/renderer/print/base.rb +5 -5
  56. data/lib/rabbit/renderer/print/cairo.rb +10 -17
  57. data/lib/rabbit/renderer/print/layout.rb +6 -6
  58. data/lib/rabbit/renderer/print/multiple.rb +11 -14
  59. data/lib/rabbit/size.rb +65 -0
  60. data/lib/rabbit/soap/driver.rb +1 -1
  61. data/lib/rabbit/soap/server.rb +1 -1
  62. data/lib/rabbit/source/argf.rb +4 -4
  63. data/lib/rabbit/source/base.rb +2 -1
  64. data/lib/rabbit/source/file.rb +8 -8
  65. data/lib/rabbit/source/hiki.rb +1 -1
  66. data/lib/rabbit/source/memory.rb +2 -2
  67. data/lib/rabbit/source/uri.rb +4 -2
  68. data/lib/rabbit/theme/applier.rb +1 -0
  69. data/lib/rabbit/theme/default-block-quote/default-block-quote.rb +3 -1
  70. data/lib/rabbit/theme/pdf/pdf.rb +12 -6
  71. data/lib/rabbit/utils.rb +6 -6
  72. data/lib/rabbit/version.rb +1 -1
  73. data/lib/rabbit/xmlrpc/server.rb +1 -1
  74. data/po/en/rabbit.edit.po +29 -30
  75. data/po/fr/rabbit.edit.po +29 -30
  76. data/po/ja/rabbit.edit.po +29 -29
  77. data/sample/rabbit-en.hiki +3 -3
  78. data/sample/rabbit-en.md +27 -8
  79. data/sample/rabbit-en.rd +2 -2
  80. data/sample/rabbit.hiki +3 -3
  81. data/sample/rabbit.md +27 -8
  82. data/sample/rabbit.rd +2 -2
  83. data/test/parser/test-markdown.rb +210 -6
  84. data/test/test-size.rb +152 -0
  85. data/test/test-source.rb +17 -0
  86. metadata +5 -2
@@ -101,7 +101,7 @@ function handle_key(e)
101
101
  <div class="footer">
102
102
  <p>
103
103
  Generated by
104
- <a href="http://rabbit-shocker.org/">Rabbit</a>
104
+ <a href="http://rabbit-shocker.org/">Rabbit</a>
105
105
  version <%= Rabbit::VERSION %>
106
106
  </p>
107
107
  </div>
@@ -6,13 +6,13 @@ module Rabbit
6
6
  class Default < Base
7
7
 
8
8
  push_loader(self)
9
-
9
+
10
10
  class << self
11
11
  def match?(filename)
12
12
  true
13
13
  end
14
14
  end
15
-
15
+
16
16
  private
17
17
  def update_size
18
18
  File.open(@filename, "rb") do |file|
@@ -7,7 +7,7 @@ module Rabbit
7
7
  class EPS < Base
8
8
 
9
9
  unshift_loader(self)
10
-
10
+
11
11
  GS_COMMANDS = %w(gs gswin32c)
12
12
 
13
13
  include SystemRunner
@@ -45,15 +45,15 @@ module Rabbit
45
45
  end
46
46
  load_data(data)
47
47
  end
48
-
48
+
49
49
  def eps_to_png(width=nil, height=nil)
50
50
  eps_to(width, height, "pngalpha")
51
51
  end
52
-
52
+
53
53
  def eps_to_pnm(width=nil, height=nil)
54
54
  eps_to(width, height, "pnm")
55
55
  end
56
-
56
+
57
57
  def eps_to(width, height, device, *gs_options)
58
58
  x, y, w, h, r = eps_size
59
59
  resolution = (r || Canvas::INTERNAL_DPI).round
@@ -81,7 +81,7 @@ module Rabbit
81
81
  end
82
82
  end
83
83
  end
84
-
84
+
85
85
  def eps_size
86
86
  sx, sy, w, h, r = nil
87
87
  File.read(@filename).split(/(?:\r\n?|\n)/).each do |line|
@@ -30,7 +30,7 @@ module Rabbit
30
30
  end
31
31
 
32
32
  def draw(canvas, x, y, params={})
33
- if @document and canvas.poppler_available?
33
+ if @document
34
34
  default_params = {
35
35
  :width => width,
36
36
  :height => height,
@@ -20,7 +20,7 @@ module Rabbit
20
20
  end
21
21
 
22
22
  def draw(canvas, x, y, params={})
23
- if @handle and canvas.rsvg_available?
23
+ if @handle
24
24
  default_params = {
25
25
  :width => width,
26
26
  :height => height,
@@ -50,18 +50,18 @@ module Rabbit
50
50
  @prog_name = prog_name
51
51
  @webrick_mode = false
52
52
  end
53
-
53
+
54
54
  def debug?; @level <= Severity::DEBUG; end
55
55
  def info?; @level <= Severity::INFO; end
56
56
  def warning?; @level <= Severity::WARNING; end
57
57
  def error?; @level <= Severity::ERROR; end
58
58
  def fatal?; @level <= Severity::FATAL; end
59
59
  def unknown?; @level <= Severity::UNKNOWN; end
60
-
60
+
61
61
  def debug(message_or_error=nil, &block)
62
62
  log(Severity::DEBUG, message_or_error, &block)
63
63
  end
64
-
64
+
65
65
  def info(message_or_error=nil, &block)
66
66
  log(Severity::INFO, message_or_error, &block)
67
67
  end
@@ -78,7 +78,7 @@ module Rabbit
78
78
  def fatal(message_or_error=nil, &block)
79
79
  log(Severity::FATAL, message_or_error, &block)
80
80
  end
81
-
81
+
82
82
  def unknown(message_or_error=nil, &block)
83
83
  log(Severity::UNKNOWN, message_or_error, &block)
84
84
  end
@@ -86,7 +86,7 @@ module Rabbit
86
86
  def <<(message_or_error)
87
87
  info(message_or_error)
88
88
  end
89
-
89
+
90
90
  def log(severity, message_or_error, prog_name=nil, &block)
91
91
  severity ||= Severity::UNKNOWN
92
92
  prog_name ||= @prog_name
@@ -13,7 +13,10 @@ module Rabbit
13
13
  message = message.encode("locale")
14
14
  rescue EncodingError
15
15
  format = _("can't convert to current locale from UTF-8: %s")
16
- $stderr.puts(format % message.encode(format.encoding))
16
+ sanitized_message = message.encode(format.encoding,
17
+ :invalid => :replace,
18
+ :undef => :replace)
19
+ $stderr.puts(format % sanitized_message)
17
20
  end
18
21
  $stderr.puts(format_severity(severity))
19
22
  $stderr.print("[#{prog_name}]: ") if prog_name
data/lib/rabbit/menu.rb CHANGED
@@ -89,7 +89,7 @@ module Rabbit
89
89
  action.name, Gtk::UIManager::AUTO, false)
90
90
  end
91
91
  end
92
-
92
+
93
93
  def update_ui
94
94
  @merge_ui = @merge.add_ui(ui_xml)
95
95
  @menu = @merge.get_widget("/popup")
@@ -101,13 +101,13 @@ module Rabbit
101
101
  def update_theme_menu(canvas)
102
102
  @merge.remove_ui(@theme_merge_id) if @theme_merge_id
103
103
  @merge.remove_action_group(@theme_actions) if @theme_actions
104
-
104
+
105
105
  @theme_merge_id = @merge.new_merge_id
106
106
  @theme_actions = Gtk::ActionGroup.new("ThemeActions")
107
107
  @merge.insert_action_group(@theme_actions, 0)
108
108
 
109
109
  themes = Theme::Searcher.collect_theme
110
-
110
+
111
111
  categories = themes.collect do |entry|
112
112
  entry.category
113
113
  end.uniq.sort_by {|cat| _(cat)}
@@ -220,7 +220,7 @@ module Rabbit
220
220
  end
221
221
  end
222
222
  end
223
-
223
+
224
224
  def items
225
225
  [
226
226
  [:item, "ToggleIndexMode"],
@@ -9,10 +9,12 @@ module Rabbit
9
9
  "option"]
10
10
  def make_image(path, prop, logger)
11
11
  image_file = Tempfile.new("rabbit-image-aafigure")
12
- command = ["aafigure",
13
- "--type", "svg",
14
- "--encoding", "utf-8",
15
- "--output", image_file.path]
12
+ command = [
13
+ "aafigure",
14
+ "--type", "svg",
15
+ "--encoding", "utf-8",
16
+ "--output", image_file.path,
17
+ ]
16
18
  aafigure_options = []
17
19
  AVAILABLE_OPTIONS.each do |name|
18
20
  command.concat(["--#{name}", prop[name]]) if prop.has_key?(name)
@@ -10,9 +10,11 @@ module Rabbit
10
10
  AVAILABLE_VALUE_OPTIONS = []
11
11
  def make_image(path, prop, logger)
12
12
  image_file = Tempfile.new("rabbit-image-blockdiag")
13
- command = ["blockdiag",
14
- "-T", "svg",
15
- "-o", image_file.path]
13
+ command = [
14
+ "blockdiag",
15
+ "-T", "svg",
16
+ "-o", image_file.path,
17
+ ]
16
18
  font = find_font(prop)
17
19
  command.concat(["-f", font]) if font
18
20
  AVAILABLE_FLAG_OPTIONS.each do |name|
@@ -3963,13 +3963,13 @@ module Rabbit
3963
3963
  "zeetrf" => "&#x02128;",
3964
3964
  # character showing function application in presentation tagging
3965
3965
  "af" => "&#x02061;",
3966
- #
3966
+ #
3967
3967
  "aopf" => "&#x1D552;",
3968
3968
  # Old ISOAMSR asymp (for HTML compatibility)
3969
3969
  "asympeq" => "&#x0224D;",
3970
- #
3970
+ #
3971
3971
  "bopf" => "&#x1D553;",
3972
- #
3972
+ #
3973
3973
  "copf" => "&#x1D554;",
3974
3974
  # cross or vector product
3975
3975
  "Cross" => "&#x02A2F;",
@@ -3977,7 +3977,7 @@ module Rabbit
3977
3977
  "DD" => "&#x02145;",
3978
3978
  # d for use in differentials, e.g., within integrals
3979
3979
  "dd" => "&#x02146;",
3980
- #
3980
+ #
3981
3981
  "dopf" => "&#x1D555;",
3982
3982
  # down arrow to bar
3983
3983
  "DownArrowBar" => "&#x02913;",
@@ -3997,7 +3997,7 @@ module Rabbit
3997
3997
  "EmptySmallSquare" => "&#x025FB;",
3998
3998
  # empty small square
3999
3999
  "EmptyVerySmallSquare" => "&#x025AB;",
4000
- #
4000
+ #
4001
4001
  "eopf" => "&#x1D556;",
4002
4002
  # two consecutive equal signs
4003
4003
  "Equal" => "&#x02A75;",
@@ -4005,15 +4005,15 @@ module Rabbit
4005
4005
  "FilledSmallSquare" => "&#x025FC;",
4006
4006
  # filled very small square
4007
4007
  "FilledVerySmallSquare" => "&#x025AA;",
4008
- #
4008
+ #
4009
4009
  "fopf" => "&#x1D557;",
4010
- #
4010
+ #
4011
4011
  "gopf" => "&#x1D558;",
4012
4012
  # alias for GT
4013
4013
  "GreaterGreater" => "&#x02AA2;",
4014
4014
  # circumflex accent
4015
4015
  "Hat" => "&#x0005E;",
4016
- #
4016
+ #
4017
4017
  "hopf" => "&#x1D559;",
4018
4018
  # short horizontal line
4019
4019
  "HorizontalLine" => "&#x02500;",
@@ -4021,13 +4021,13 @@ module Rabbit
4021
4021
  "ic" => "&#x02063;",
4022
4022
  # i for use as a square root of -1
4023
4023
  "ii" => "&#x02148;",
4024
- #
4024
+ #
4025
4025
  "iopf" => "&#x1D55A;",
4026
4026
  # marks multiplication when it is understood without a mark
4027
4027
  "it" => "&#x02062;",
4028
- #
4028
+ #
4029
4029
  "jopf" => "&#x1D55B;",
4030
- #
4030
+ #
4031
4031
  "kopf" => "&#x1D55C;",
4032
4032
  # leftwards arrow to bar
4033
4033
  "larrb" => "&#x021E4;",
@@ -4051,7 +4051,7 @@ module Rabbit
4051
4051
  "LeftVectorBar" => "&#x02952;",
4052
4052
  # alias for Lt
4053
4053
  "LessLess" => "&#x02AA1;",
4054
- #
4054
+ #
4055
4055
  "lopf" => "&#x1D55D;",
4056
4056
  # downwards arrow from bar
4057
4057
  "mapstodown" => "&#x021A7;",
@@ -4061,7 +4061,7 @@ module Rabbit
4061
4061
  "mapstoup" => "&#x021A5;",
4062
4062
  # space of width 4/18 em
4063
4063
  "MediumSpace" => "&#x0205F;",
4064
- #
4064
+ #
4065
4065
  "mopf" => "&#x1D55E;",
4066
4066
  # not bumpy equals
4067
4067
  "nbump" => "&#x0224E;&#x00338;",
@@ -4073,7 +4073,7 @@ module Rabbit
4073
4073
  "NewLine" => "&#x0000A;",
4074
4074
  # never break line here
4075
4075
  "NoBreak" => "&#x02060;",
4076
- #
4076
+ #
4077
4077
  "nopf" => "&#x1D55F;",
4078
4078
  # alias for &nasymp;
4079
4079
  "NotCupCap" => "&#x0226D;",
@@ -4093,7 +4093,7 @@ module Rabbit
4093
4093
  "NotSquareSuperset" => "&#x02290;&#x00338;",
4094
4094
  # not succeeds or similar
4095
4095
  "NotSucceedsTilde" => "&#x0227F;&#x00338;",
4096
- #
4096
+ #
4097
4097
  "oopf" => "&#x1D560;",
4098
4098
  # over bar
4099
4099
  "OverBar" => "&#x000AF;",
@@ -4105,11 +4105,11 @@ module Rabbit
4105
4105
  "OverParenthesis" => "&#x0FE35;",
4106
4106
  # the ring (skew field) of quaternions
4107
4107
  "planckh" => "&#x0210E;",
4108
- #
4108
+ #
4109
4109
  "popf" => "&#x1D561;",
4110
4110
  # alias for &prod;
4111
4111
  "Product" => "&#x0220F;",
4112
- #
4112
+ #
4113
4113
  "qopf" => "&#x1D562;",
4114
4114
  # leftwards arrow to bar
4115
4115
  "rarrb" => "&#x021E5;",
@@ -4129,19 +4129,19 @@ module Rabbit
4129
4129
  "RightUpVectorBar" => "&#x02954;",
4130
4130
  # up-right harpoon to bar
4131
4131
  "RightVectorBar" => "&#x02953;",
4132
- #
4132
+ #
4133
4133
  "ropf" => "&#x1D563;",
4134
4134
  # round implies
4135
4135
  "RoundImplies" => "&#x02970;",
4136
4136
  # rule-delayed (colon right arrow)
4137
4137
  "RuleDelayed" => "&#x029F4;",
4138
- #
4138
+ #
4139
4139
  "sopf" => "&#x1D564;",
4140
4140
  # tabulator stop; horizontal tabulation
4141
4141
  "Tab" => "&#x00009;",
4142
4142
  # space of width 5/18 em
4143
4143
  "ThickSpace" => "&#x02009;&#x0200A;&#x0200A;",
4144
- #
4144
+ #
4145
4145
  "topf" => "&#x1D565;",
4146
4146
  # under brace
4147
4147
  "UnderBrace" => "&#x0FE38;",
@@ -4149,7 +4149,7 @@ module Rabbit
4149
4149
  "UnderBracket" => "&#x023B5;",
4150
4150
  # under parenthesis
4151
4151
  "UnderParenthesis" => "&#x0FE36;",
4152
- #
4152
+ #
4153
4153
  "uopf" => "&#x1D566;",
4154
4154
  # up arrow to bar
4155
4155
  "UpArrowBar" => "&#x02912;",
@@ -4159,17 +4159,17 @@ module Rabbit
4159
4159
  "VerticalLine" => "&#x0007C;",
4160
4160
  # vertical separating operator
4161
4161
  "VerticalSeparator" => "&#x02758;",
4162
- #
4162
+ #
4163
4163
  "vopf" => "&#x1D567;",
4164
- #
4164
+ #
4165
4165
  "wopf" => "&#x1D568;",
4166
- #
4166
+ #
4167
4167
  "xopf" => "&#x1D569;",
4168
- #
4168
+ #
4169
4169
  "yopf" => "&#x1D56A;",
4170
4170
  # zero width space
4171
4171
  "ZeroWidthSpace" => "&#x0200B;",
4172
- #
4172
+ #
4173
4173
  "zopf" => "&#x1D56B;",
4174
4174
  }
4175
4175
  end
@@ -1,7 +1,49 @@
1
1
  require "kramdown"
2
+ require "kramdown/parser/kramdown"
3
+ require "kramdown/parser/gfm"
2
4
 
3
5
  require "rabbit/parser/base"
4
6
 
7
+ module Kramdown
8
+ module Parser
9
+ class Kramdown
10
+ alias_method :handle_extension_raw, :handle_extension
11
+ def handle_extension(name, opts, body, type, line_no=nil)
12
+ case name
13
+ when "wait"
14
+ @tree.children << Element.new(:wait, body, nil, :category => type, :location => line_no)
15
+ true
16
+ else
17
+ handle_extension_raw(name, opts, body, type, line_no)
18
+ end
19
+ end
20
+
21
+ alias_method :configure_parser_raw, :configure_parser
22
+ def configure_parser
23
+ position = @block_parsers.index(:codeblock_fenced)
24
+ @block_parsers.insert(position, :codeblock_fenced_gfm)
25
+
26
+ configure_parser_raw
27
+ end
28
+
29
+ parser(:codeblock_fenced_gfm).method = "parse_codeblock_fenced_gfm"
30
+
31
+ def parse_codeblock_fenced_gfm
32
+ original_match = self.class::FENCED_CODEBLOCK_MATCH
33
+ begin
34
+ self.class.send(:remove_const, :FENCED_CODEBLOCK_MATCH)
35
+ self.class.const_set(:FENCED_CODEBLOCK_MATCH,
36
+ GFM::FENCED_CODEBLOCK_MATCH)
37
+ parse_codeblock_fenced
38
+ ensure
39
+ self.class.send(:remove_const, :FENCED_CODEBLOCK_MATCH)
40
+ self.class.const_set(:FENCED_CODEBLOCK_MATCH, original_match)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+
5
47
  module Rabbit
6
48
  module Parser
7
49
  class Markdown < Base
@@ -1,8 +1,18 @@
1
+ require "English"
2
+
3
+ require "rabbit/parser/pause-support"
4
+ require "rabbit/parser/ext/blockdiag"
5
+ require "rabbit/parser/ext/coderay"
6
+ require "rabbit/parser/ext/escape"
7
+ require "rabbit/parser/ext/image"
8
+ require "rabbit/parser/ext/tex"
9
+
1
10
  module Rabbit
2
11
  module Parser
3
12
  class Markdown
4
13
  class Converter
5
14
  include Element
15
+ include PauseSupport
6
16
 
7
17
  def initialize(canvas)
8
18
  @canvas = canvas
@@ -11,15 +21,17 @@ module Rabbit
11
21
  @slide_property_mode = false
12
22
  end
13
23
 
14
- def convert(element)
15
- __send__("convert_#{element.type}", element)
24
+ def convert(element, context=nil)
25
+ method_name = "convert_#{element.type}"
26
+ method_name << "_#{context}" if context
27
+ __send__(method_name, element)
16
28
  end
17
29
 
18
30
  private
19
- def convert_container(element)
31
+ def convert_container(element, context=nil)
20
32
  elements = []
21
33
  element.children.each do |child|
22
- element = convert(child)
34
+ element = convert(child, context)
23
35
  case element
24
36
  when nil, :no_element
25
37
  # ignore
@@ -39,7 +51,7 @@ module Rabbit
39
51
  next
40
52
  when nil
41
53
  mode = :ignore
42
- when Slide
54
+ when Element::Slide
43
55
  target = content.body
44
56
  @canvas << content
45
57
  mode = :display
@@ -59,6 +71,7 @@ module Rabbit
59
71
  end
60
72
  end
61
73
  end
74
+ burn_out_pause_targets
62
75
  end
63
76
 
64
77
  def convert_header(element)
@@ -69,7 +82,7 @@ module Rabbit
69
82
  if @slides.empty?
70
83
  @slide = TitleSlide.new(Title.new(contents))
71
84
  else
72
- @slide = Slide.new(HeadLine.new(contents))
85
+ @slide = Element::Slide.new(HeadLine.new(contents))
73
86
  @slide << Body.new
74
87
  end
75
88
  @slides << @slide
@@ -114,8 +127,14 @@ module Rabbit
114
127
  list
115
128
  end
116
129
 
130
+ def create_paragraph(elements)
131
+ paragraph = Paragraph.new(elements)
132
+ register_pause(paragraph) if paragraph.have_wait_tag?
133
+ paragraph
134
+ end
135
+
117
136
  def convert_dt(element)
118
- DescriptionTerm.new(Paragraph.new(convert_container(element)))
137
+ DescriptionTerm.new(create_paragraph(convert_container(element)))
119
138
  end
120
139
 
121
140
  def convert_dd(element)
@@ -130,17 +149,61 @@ module Rabbit
130
149
  raise ParseError,
131
150
  _("multiple ![alt]{image} in a paragraph isn't supported.")
132
151
  else
133
- Paragraph.new(convert_container(element))
152
+ create_paragraph(convert_container(element))
153
+ end
154
+ end
155
+ end
156
+
157
+ def create_list(list_class, contents)
158
+ list = list_class.new
159
+ contents.each do |content|
160
+ list << content
161
+ if block_given?
162
+ yield(list, content)
163
+ end
164
+ end
165
+ list
166
+ end
167
+
168
+ def create_list_item(list_item_class, contents)
169
+ list_item = list_item_class.new(contents)
170
+
171
+ waited_paragraphs = list_item.elements.find_all do |element|
172
+ element.is_a?(Paragraph) and element.have_wait_tag?
173
+ end
174
+ unless waited_paragraphs.empty?
175
+ waited_paragraphs.each do |paragraph|
176
+ paragraph.default_visible = true
177
+ paragraph.clear_theme
178
+ unregister_pause(paragraph)
134
179
  end
180
+
181
+ list_item.default_visible = false
182
+ list_item.clear_theme
183
+ register_pause(list_item)
135
184
  end
185
+
186
+ list_item
136
187
  end
137
188
 
138
189
  def convert_ul(element)
139
- ItemList.new(convert_container(element))
190
+ create_list(ItemList, convert_container(element, "ul"))
140
191
  end
141
192
 
142
- def convert_li(element)
143
- ItemListItem.new(convert_container(element))
193
+ def convert_li_ul(element)
194
+ create_list_item(ItemListItem, convert_container(element))
195
+ end
196
+
197
+ def convert_ol(element)
198
+ i = 1
199
+ create_list(EnumList, convert_container(element, "ol")) do |list, item|
200
+ item.order = i
201
+ i += 1
202
+ end
203
+ end
204
+
205
+ def convert_li_ol(element)
206
+ create_list_item(EnumListItem, convert_container(element))
144
207
  end
145
208
 
146
209
  def convert_smart_quote(element)
@@ -198,12 +261,42 @@ module Rabbit
198
261
 
199
262
  def convert_codeblock(element)
200
263
  content = element.value.chomp
264
+ language = detect_codeblock_language(element)
265
+ if language
266
+ converted = convert_codeblock_language(element, language, content)
267
+ end
268
+ converted || PreformattedBlock.new(PreformattedText.new(text(content)))
269
+ end
270
+
271
+ def detect_codeblock_language(element)
201
272
  lang = element.attr["lang"]
202
- if lang
203
- highlighted = Ext::CodeRay.highlight(lang, content, @canvas.logger)
204
- return highlighted if highlighted
273
+ return lang if lang
274
+
275
+ language = element.attr["language"]
276
+ return language if language
277
+
278
+ klass = element.attr["class"]
279
+ if klass and /\Alanguage-/ =~ klass
280
+ return $POSTMATCH
281
+ end
282
+
283
+ nil
284
+ end
285
+
286
+ def convert_codeblock_language(element, language, content)
287
+ case language
288
+ when "blockdiag"
289
+ args = [@canvas, content]
290
+ Ext::Image.make_image_from_file(*args) do |src_file_path|
291
+ [
292
+ Ext::BlockDiag.make_image(src_file_path, element.attr, @canvas),
293
+ element.attr,
294
+ ]
295
+ end
296
+ else
297
+ logger = @canvas.logger
298
+ Ext::CodeRay.highlight(language, content, logger)
205
299
  end
206
- PreformattedBlock.new(PreformattedText.new(text(content)))
207
300
  end
208
301
 
209
302
  def convert_blockquote(element)
@@ -226,7 +319,7 @@ module Rabbit
226
319
  end
227
320
  body["background-image"] = uri
228
321
  options.each do |name, value|
229
- name = name.to_s.gsub(/_/, '-')
322
+ name = name.to_s.gsub(/_/, "-")
230
323
  body["background-image-#{name}"] = value
231
324
  end
232
325
  :no_element
@@ -253,7 +346,7 @@ module Rabbit
253
346
 
254
347
  def convert_a(element)
255
348
  ref = ReferText.new(convert_container(element))
256
- ref.to = element.attr['href']
349
+ ref.to = element.attr["href"]
257
350
  ref
258
351
  end
259
352
 
@@ -262,7 +355,11 @@ module Rabbit
262
355
  end
263
356
 
264
357
  def convert_codespan(element)
265
- Code.new(Text.new(element.value))
358
+ Code.new(text(element.value))
359
+ end
360
+
361
+ def convert_wait(element)
362
+ WaitTag.new
266
363
  end
267
364
  end
268
365
  end