Sha256: d4571eb0c519c306519717eb0d56a5bc2190fb08ef5925a5a2e28c36e406005c
Contents?: true
Size: 1.3 KB
Versions: 1
Compression:
Stored size: 1.3 KB
Contents
require 'redcarpet' require 'ostruct' require 'yaml' module Marksman class Parser def parse(file) metadata, markdown = load_file(file) slides = split_slides(markdown).map do |slide| sections = separate_presenter_notes(slide) Slide.new( slide: generate_html(sections.slide).strip, notes: generate_html(sections.notes).strip ) end Presentation.new(filename: File.basename(file), metadata: metadata, slides: slides) end private def load_file(file) content = File.read(file) if content.match /^(---\s*\n.*?\n?)^(?:---\s*$\n?)(.*)/m [parse_yaml($1), $2] else [{}, content] end end def parse_yaml(data) yaml = YAML.load(data) yaml.keys.each do |key| yaml[key.to_sym] = yaml.delete key end yaml end def separate_presenter_notes(slide) sections = slide.split(/^(?:\*{1}\s?){3,}\s*$/).each(&:strip) Slide.new(slide: sections[0], notes: sections[1]) end def split_slides(markdown) slides = markdown.split(/^(?:[-]{1}\s?){3,}\s*$/).each(&:strip) end def generate_html(slide) markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML,{fenced_code_blocks: true}) markdown.render(slide || '') end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
marksman-0.1 | lib/marksman/parser.rb |