Class: Codex::Content

Inherits:
Object
  • Object
show all
Defined in:
lib/codex/content.rb

Constant Summary collapse

START_SLIDE =
%{<div class="slide">\n}
END_SLIDE =
%{</div>\n}
BETWEEN_SLIDES =
END_SLIDE + "\n" + START_SLIDE
HEADING_MARKER =
'h1'
REPEAT_SLIDE_MARKER =
'<<'
SPLIT_REGEX =
/^(#{HEADING_MARKER}|#{REPEAT_SLIDE_MARKER})/

Instance Method Summary collapse

Constructor Details

#initialize(original) ⇒ Content

Returns a new instance of Content.



11
12
13
# File 'lib/codex/content.rb', line 11

def initialize(original)
  @original = original.sub(/__END__.*/m, '').gsub(/__SKIP__.*?__ENDSKIP__/m, '')
end

Instance Method Details

#join_slides(slides) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/codex/content.rb', line 47

def join_slides(slides)
  result = []
  slides.each do |slide|
    result << START_SLIDE << "\nh1" << slide << END_SLIDE
  end
  result.join
end

#repeat_slides(slides) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/codex/content.rb', line 37

def repeat_slides(slides)
  result = []
  slides.each_with_index do |slide_data, index|
    delim, slide = slide_data
    slide = result[index - 1] + slide if delim == REPEAT_SLIDE_MARKER and index > 0
    result << slide
  end
  result
end

#split_into_slides(textile) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/codex/content.rb', line 23

def split_into_slides(textile)
  delims_and_slides = textile.split(SPLIT_REGEX)
  delims_and_slides[1..-1].inject([]) do |accum, s|
    last_el = accum.last
    if last_el.is_a?(String)
      accum.pop
      accum << [last_el, s]
    else
      accum << s
    end
    accum
  end
end

#to_htmlObject



15
16
17
18
19
20
21
# File 'lib/codex/content.rb', line 15

def to_html
  textile = Codex::Filters.instance.filter_all(@original)
  slides = split_into_slides(textile)
  slides = repeat_slides(slides)
  content = join_slides(slides)
  html = RedCloth.new(content).to_html
end