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.



40
41
42
# File 'lib/rabbit/parser/wiki/output.rb', line 40

def initialize(canvas)
  @canvas = canvas
end

Instance Attribute Details

#canvasObject (readonly)

Returns the value of attribute canvas.



39
40
41
# File 'lib/rabbit/parser/wiki/output.rb', line 39

def canvas
  @canvas
end

Instance Method Details

#block_plugin(src) ⇒ Object



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

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



279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
# File 'lib/rabbit/parser/wiki/output.rb', line 279

def block_preformatted(contents, info)
  return unless @parent

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

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

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

#blockquote_closeObject



273
274
275
276
277
# File 'lib/rabbit/parser/wiki/output.rb', line 273

def blockquote_close
  return unless @parent

  @parent = @parent.parent
end

#blockquote_openObject



265
266
267
268
269
270
271
# File 'lib/rabbit/parser/wiki/output.rb', line 265

def blockquote_open
  return unless @parent

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

#container(_for = nil) ⇒ Object



67
68
69
# File 'lib/rabbit/parser/wiki/output.rb', line 67

def container(_for=nil)
  []
end

#current_bodyObject



71
72
73
# File 'lib/rabbit/parser/wiki/output.rb', line 71

def current_body
  @slides.last.body
end

#del(item) ⇒ Object



342
343
344
# File 'lib/rabbit/parser/wiki/output.rb', line 342

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

#dlist_closeObject



187
188
189
190
191
192
193
# File 'lib/rabbit/parser/wiki/output.rb', line 187

def dlist_close
  return unless @parent

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

#dlist_item(dt, dd) ⇒ Object



195
196
197
198
199
200
201
202
203
204
205
206
207
# File 'lib/rabbit/parser/wiki/output.rb', line 195

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



179
180
181
182
183
184
185
# File 'lib/rabbit/parser/wiki/output.rb', line 179

def dlist_open
  return unless @parent

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

#em(item) ⇒ Object



338
339
340
# File 'lib/rabbit/parser/wiki/output.rb', line 338

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

#finishObject



60
61
62
63
64
65
# File 'lib/rabbit/parser/wiki/output.rb', line 60

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

#headline(level, title) ⇒ Object

Procedures



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/rabbit/parser/wiki/output.rb', line 79

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 = Element::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



105
106
107
# File 'lib/rabbit/parser/wiki/output.rb', line 105

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

Functions



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

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

inline image is not supported yet…



330
331
332
# File 'lib/rabbit/parser/wiki/output.rb', line 330

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

#inline_plugin(src) ⇒ Object



350
351
352
# File 'lib/rabbit/parser/wiki/output.rb', line 350

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

#list_beginObject



109
110
# File 'lib/rabbit/parser/wiki/output.rb', line 109

def list_begin
end

#list_close(type) ⇒ Object



137
138
139
140
141
142
143
144
# File 'lib/rabbit/parser/wiki/output.rb', line 137

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



112
113
# File 'lib/rabbit/parser/wiki/output.rb', line 112

def list_end
end

#list_open(type) ⇒ Object



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/rabbit/parser/wiki/output.rb', line 115

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



152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'lib/rabbit/parser/wiki/output.rb', line 152

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



149
150
# File 'lib/rabbit/parser/wiki/output.rb', line 149

def listitem_close
end

#listitem_openObject



146
147
# File 'lib/rabbit/parser/wiki/output.rb', line 146

def listitem_open
end

#paragraph(contents) ⇒ Object



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

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



296
297
298
299
300
# File 'lib/rabbit/parser/wiki/output.rb', line 296

def preformatted(contents)
  return unless @parent

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

#resetObject



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/rabbit/parser/wiki/output.rb', line 44

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



334
335
336
# File 'lib/rabbit/parser/wiki/output.rb', line 334

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

#table_closeObject



223
224
225
226
227
228
229
230
# File 'lib/rabbit/parser/wiki/output.rb', line 223

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



257
258
259
260
261
262
263
# File 'lib/rabbit/parser/wiki/output.rb', line 257

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



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

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::Alignment::CENTER
  end
  @parent << header
end

#table_openObject



209
210
211
212
213
214
215
216
217
218
219
220
221
# File 'lib/rabbit/parser/wiki/output.rb', line 209

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



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

def table_record_close
  return unless @parent

  @parent = @parent.parent
end

#table_record_openObject



232
233
234
235
236
237
# File 'lib/rabbit/parser/wiki/output.rb', line 232

def table_record_open
  return unless @parent

  @parent = TableRow.new
  @table_record_type = nil
end

#text(str) ⇒ Object



346
347
348
# File 'lib/rabbit/parser/wiki/output.rb', line 346

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