class Slideshow::Deck

Attributes

content[RW]
slides[RW]

Public Class Methods

new( source, header_level: 2, use_slide: false ) click to toggle source
# File lib/slideshow/models/deck.rb, line 88
def initialize( source, header_level: 2, use_slide: false )
  @source = source  ## keep a copy of the original source (input)

  @header_level = header_level   # e.g. 1 or 2   -- todo/fix: allow more options e.g. 1..2 etc.
  @use_slide    = use_slide      # e.g. opts.slide? -- only allow !SLIDE directives fo slide breaks?

  @slides  = []
  @content = ''  # note: gets (re)build from slides in parse

  parse()
end

Public Instance Methods

parse() click to toggle source
# File lib/slideshow/models/deck.rb, line 101
def parse
  #############################
  # step 1 - add slide breaks

  @content = @source

  if @use_slide  # only allow !SLIDE directives fo slide breaks?
     # do nothing (no extra automagic slide breaks wanted)
  else  

    ## default rule for horizontal line/rule <hr> - gets replaced by slide directive
    ##  - for now alway on/used  (use !SLIDE only if not wanted for now)
    @content = add_slide_directive_for_hr( @content )

    if @header_level == 1
      @content = add_slide_directive_before_h1( @content )
    else # assume level 2
      ## note: level 2 also turns level 1 into slide breaks
      @content = add_slide_directive_before_h1( @content )
      @content = add_slide_directive_before_h2( @content )
    end
  end


  ### todo/fix: add back dump to file (requires @name and outpath !!!!)
  ### dump_content_to_file_debug_html( content )


  #############################################################
  # step 2 -  use generic slide break processing instruction to
  #   split content into slides

  counter = 0
  chunks = []
  buf = ""

   
  @content.each_line do |line|
     if line.include?( '<!-- _S9SLIDE_' ) || line.include?( '<!-- @SLIDE' )  ## add new format
        if counter > 0   # found start of new slide (and, thus, end of last slide)
          chunks << buf  # add slide to slide stack
          buf = ""         # reset slide source buffer
        else  # counter == 0
          # check for first slide with missing leading SLIDE directive (possible/allowed in takahashi, for example)
          ##  remove html comments and whitspaces (still any content?)
          ### more than just whitespace? assume its  a slide
          if buf.gsub(/<!--.*?-->/m, '').gsub( /[\n\r\t ]/, '').length > 0
            logger.debug "add slide with missing leading slide directive >#{buf}< with slide_counter == 0"
            chunks << buf
            buf = ""
          else
            logger.debug "** note: skipping slide >#{buf}< with counter == 0"
          end
        end
        counter += 1
     end
     buf << line
  end

  if counter > 0
    chunks << buf     # add slide to slide stack
    buf = ""            # reset slide source buffer
  end


  @slides = []
  chunks.each do |chunk|
    @slides << Slide.new( chunk, header_level: @header_level )
  end


  puts "#{@slides.size} slides found:"
  
  @slides.each_with_index do |slide,i|
    print "  [#{i+1}] "
    if slide.header.present?
      print slide.header
    else
      # remove html comments
      print "-- no header -- | #{slide.content.gsub(/<!--.*?-->/m, '').gsub(/\n/,'$')[0..40]}"
    end
    puts
  end

  ## rebuild all-in-one content (incl. all slides)
  @content = ""
  @slides.each do |slide|
    @content << slide.to_classic_html
  end  
end