Class: Rabbit::Parser::Wiki::RabbitOutput

Inherits:
Object
  • Object
show all
Includes:
Element, PauseSupport
Defined in:
lib/rabbit/parser/wiki/output.rb

Defined Under Namespace

Classes: BlockPlugin, InlinePlugin

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from PauseSupport

#burn_out_pause_targets, #pause_targets, #register_pause, #unregister_pause

Constructor Details

#initialize(canvas) ⇒ RabbitOutput

Returns a new instance of RabbitOutput.



22
23
24
# File 'lib/rabbit/parser/wiki/output.rb', line 22

def initialize(canvas)
  @canvas = canvas
end

Instance Attribute Details

#canvasObject (readonly)

Returns the value of attribute canvas.



21
22
23
# File 'lib/rabbit/parser/wiki/output.rb', line 21

def canvas
  @canvas
end

Instance Method Details

#block_plugin(src) ⇒ Object



292
293
294
295
296
297
298
# File 'lib/rabbit/parser/wiki/output.rb', line 292

def block_plugin(src)
  return unless @parent

  result = evaluate_block_plugin(src)
  return if result == :no_element
  @parent << (result || text("{{#{src}}}"))
end

#block_preformatted(contents, info) ⇒ Object



261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
# File 'lib/rabbit/parser/wiki/output.rb', line 261

def block_preformatted(contents, info)
  return unless @parent

  lang = info ? info.downcase : nil
  result = nil

  if lang
    result = Ext::CodeRay.highlight(lang, contents, @canvas.logger)
  end

  if result
    @parent << result
  else
    preformatted(text(contents))
  end
end

#blockquote_closeObject



255
256
257
258
259
# File 'lib/rabbit/parser/wiki/output.rb', line 255

def blockquote_close
  return unless @parent

  @parent = @parent.parent
end

#blockquote_openObject



247
248
249
250
251
252
253
# File 'lib/rabbit/parser/wiki/output.rb', line 247

def blockquote_open
  return unless @parent

  block_quote = BlockQuote.new
  @parent << block_quote
  @parent = block_quote
end

#container(_for = nil) ⇒ Object



49
50
51
# File 'lib/rabbit/parser/wiki/output.rb', line 49

def container(_for=nil)
  []
end

#current_bodyObject



53
54
55
# File 'lib/rabbit/parser/wiki/output.rb', line 53

def current_body
  @slides.last.body
end

#del(item) ⇒ Object



324
325
326
# File 'lib/rabbit/parser/wiki/output.rb', line 324

def del(item)
  DeletedText.new(item)
end

#dlist_closeObject



169
170
171
172
173
174
175
# File 'lib/rabbit/parser/wiki/output.rb', line 169

def dlist_close
  return unless @parent

  list = @parent
  @parent = list.parent
  @parent << list
end

#dlist_item(dt, dd) ⇒ Object



177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/rabbit/parser/wiki/output.rb', line 177

def dlist_item(dt, dd)
  if @slide_property_mode and @target_slide
    name = dt.collect {|element| element.text}.join
    value = dd.collect {|element| element.text}.join
    @target_slide[Parser.normalize_property_name(name)] = value.strip
  else
    return unless @parent

    desc_term = DescriptionTerm.new(Paragraph.new(dt.flatten))
    desc_content = DescriptionContent.new(Paragraph.new(dd.flatten))
    @parent << DescriptionListItem.new(desc_term, desc_content)
  end
end

#dlist_openObject



161
162
163
164
165
166
167
# File 'lib/rabbit/parser/wiki/output.rb', line 161

def dlist_open
  return unless @parent

  list = DescriptionList.new
  list.parent = @parent
  @parent = list
end

#em(item) ⇒ Object



320
321
322
# File 'lib/rabbit/parser/wiki/output.rb', line 320

def em(item)
  Emphasis.new(item)
end

#finishObject



42
43
44
45
46
47
# File 'lib/rabbit/parser/wiki/output.rb', line 42

def finish
  @slides.each do |slide|
    @canvas << slide
  end
  burn_out_pause_targets
end

#headline(level, title) ⇒ Object

Procedures



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/rabbit/parser/wiki/output.rb', line 61

def headline(level, title)
  @slide_property_mode = false
  case level
  when 1
    slide = nil
    if @slides.empty?
      @title_slide = true
      slide = TitleSlide.new(Title.new(title))
      @parent = slide
    else
      @title_slide = false
      slide = Slide.new(HeadLine.new(title))
      body = Body.new
      slide << body
      @parent = body
    end
    @foot_texts << []
    @slides << slide
  when 2
    @slide_property_mode = true
    @parent, @target_slide = nil, @slides.last
  else
    @parent = nil
  end
end

#hruleObject



87
88
89
# File 'lib/rabbit/parser/wiki/output.rb', line 87

def hrule
  @canvas.logger.warn(_("horizontal rule is unsupported")) if @parent
end

Functions



305
306
307
308
309
# File 'lib/rabbit/parser/wiki/output.rb', line 305

def hyperlink(uri, title)
  ref = ReferText.new(title)
  ref.to = uri
  ref
end

inline image is not supported yet…



312
313
314
# File 'lib/rabbit/parser/wiki/output.rb', line 312

def image_hyperlink(uri, alt=nil)
  Ext::Image.make_image(@canvas, uri, "caption" => alt) || Text.new(uri)
end

#inline_plugin(src) ⇒ Object



332
333
334
# File 'lib/rabbit/parser/wiki/output.rb', line 332

def inline_plugin(src)
  evaluate_inline_plugin(src) || text("{{#{src}}}")
end

#list_beginObject



91
92
# File 'lib/rabbit/parser/wiki/output.rb', line 91

def list_begin
end

#list_close(type) ⇒ Object



119
120
121
122
123
124
125
126
# File 'lib/rabbit/parser/wiki/output.rb', line 119

def list_close(type)
  @enum_order_stack.pop if type == "ol"
  @list_type_stack.pop
  return unless @parent

  @parent = @parent.parent
  @parent = @parent.parent unless @list_type_stack.empty?
end

#list_endObject



94
95
# File 'lib/rabbit/parser/wiki/output.rb', line 94

def list_end
end

#list_open(type) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/rabbit/parser/wiki/output.rb', line 97

def list_open(type)
  @enum_order_stack << 1 if type == "ol"
  @list_type_stack << type
  return unless @parent

  case type
  when "ul"
    list = ItemList.new
  when "ol"
    list = EnumList.new
  else
    unsupported_list_type(type)
  end

  if @list_type_stack.size > 1
    @parent.elements.last << list
  else
    @parent << list
  end
  @parent = list
end

#listitem(item) ⇒ Object



134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/rabbit/parser/wiki/output.rb', line 134

def listitem(item)
  return unless @parent

  list_item = nil
  item = item.flatten
  paragraph = Paragraph.new(item)
  type = @list_type_stack.last
  case type
  when "ul"
    list_item = ItemListItem.new(paragraph)
    @parent << list_item
  when "ol"
    list_item = EnumListItem.new(paragraph)
    list_item.order = @enum_order_stack.last
    @enum_order_stack[-1] += 1
    @parent << list_item
  else
    unsupported_list_type
  end

  return unless paragraph.have_wait_tag?

  paragraph.default_visible = true
  paragraph.clear_theme
  register_pause(list_item)
end

#listitem_closeObject



131
132
# File 'lib/rabbit/parser/wiki/output.rb', line 131

def listitem_close
end

#listitem_openObject



128
129
# File 'lib/rabbit/parser/wiki/output.rb', line 128

def listitem_open
end

#paragraph(contents) ⇒ Object



284
285
286
287
288
289
290
# File 'lib/rabbit/parser/wiki/output.rb', line 284

def paragraph(contents)
  return unless @parent

  paragraph = Paragraph.new(contents.flatten)
  register_pause(paragraph) if paragraph.have_wait_tag?
  @parent << paragraph
end

#preformatted(contents) ⇒ Object



278
279
280
281
282
# File 'lib/rabbit/parser/wiki/output.rb', line 278

def preformatted(contents)
  return unless @parent

  @parent << PreformattedBlock.new(PreformattedText.new(contents))
end

#resetObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/rabbit/parser/wiki/output.rb', line 26

def reset
  @title_slide = false

  @slides = []
  @parent = nil
  @index = {}

  @slide_property_mode = false
  @target_slide = nil

  @enum_order_stack = []
  @list_type_stack = []

  @foot_texts = []
end

#strong(item) ⇒ Object



316
317
318
# File 'lib/rabbit/parser/wiki/output.rb', line 316

def strong(item)
  Emphasis.new(Emphasis.new(item))
end

#table_closeObject



205
206
207
208
209
210
211
212
# File 'lib/rabbit/parser/wiki/output.rb', line 205

def table_close
  return unless @parent

  @table << @table_head if @have_table_header
  @table << @table_body if @have_table_body

  @parent = @table.parent
end

#table_data(item, rs, cs) ⇒ Object



239
240
241
242
243
244
245
# File 'lib/rabbit/parser/wiki/output.rb', line 239

def table_data(item, rs, cs)
  return unless @parent

  @have_table_body = true
  @table_body << @parent if @parent.parent.nil?
  @parent << TableCell.new(item)
end

#table_head(item, rs, cs) ⇒ Object



227
228
229
230
231
232
233
234
235
236
237
# File 'lib/rabbit/parser/wiki/output.rb', line 227

def table_head(item, rs, cs)
  return unless @parent

  @have_table_header = true
  @table_head << @parent if @parent.parent.nil?
  header = TableHeader.new(item)
  def header.default_align
    Pango::Layout::ALIGN_CENTER
  end
  @parent << header
end

#table_openObject



191
192
193
194
195
196
197
198
199
200
201
202
203
# File 'lib/rabbit/parser/wiki/output.rb', line 191

def table_open
  return unless @parent

  @table = Table.new
  @parent << @table
  @parent = @table

  @table_head = TableHead.new
  @table_body = TableBody.new

  @have_table_header = false
  @have_table_body = false
end

#table_record_closeObject



221
222
223
224
225
# File 'lib/rabbit/parser/wiki/output.rb', line 221

def table_record_close
  return unless @parent

  @parent = @parent.parent
end

#table_record_openObject



214
215
216
217
218
219
# File 'lib/rabbit/parser/wiki/output.rb', line 214

def table_record_open
  return unless @parent

  @parent = TableRow.new
  @table_record_type = nil
end

#text(str) ⇒ Object



328
329
330
# File 'lib/rabbit/parser/wiki/output.rb', line 328

def text(str)
  Text.new(Ext::Escape.escape_meta_character(str))
end