class Md2key::Keynote
Constants
- CODE_BACKGROUND_PATH
- COVER_SLIDE_INDEX
- TEMPLATE_SLIDE_INDEX
Public Class Methods
create_slide(slide, master_name)
click to toggle source
@param [Md2key::Nodes::Slide] slide @param [String] master_name
# File lib/md2key/keynote.rb, line 20 def create_slide(slide, master_name) if slide.lines.any?(&:indented?) create_indented_slide(slide, master_name) else # Not using `create_indented_slide` because this is faster. execute_applescript('create_slide_and_write_body', slide.title, slide.lines.map(&:text).join("\n"), master_name, TEMPLATE_SLIDE_INDEX) end end
create_slide_with_table(slide, rows, columns, master_name)
click to toggle source
@param [Md2key::Nodes::Slide] slide
# File lib/md2key/keynote.rb, line 30 def create_slide_with_table(slide, rows, columns, master_name) execute_applescript('create_slide_and_insert_table', slide.title, TEMPLATE_SLIDE_INDEX, rows, columns, master_name) end
delete_extra_slides()
click to toggle source
All slides after a second slide are unnecessary and deleted.
# File lib/md2key/keynote.rb, line 40 def delete_extra_slides execute_applescript('delete_extra_slides', slides_count) end
delete_template_slide()
click to toggle source
# File lib/md2key/keynote.rb, line 44 def delete_template_slide execute_applescript('delete_slide', TEMPLATE_SLIDE_INDEX) end
ensure_template_slide_availability()
click to toggle source
# File lib/md2key/keynote.rb, line 34 def ensure_template_slide_availability return if slides_count >= 2 execute_applescript('create_empty_slide') end
fetch_master_slide_name(slide_index)
click to toggle source
@param [Integer] slide_index @return [String]
# File lib/md2key/keynote.rb, line 96 def fetch_master_slide_name(slide_index) execute_applescript('fetch_master_slide_name', slide_index).rstrip end
fetch_master_slide_names()
click to toggle source
@return [Array<String>]
# File lib/md2key/keynote.rb, line 101 def fetch_master_slide_names execute_applescript('fetch_master_slide_names').strip.split("\n") end
insert_code(code)
click to toggle source
# File lib/md2key/keynote.rb, line 53 def insert_code(code) draw_diagram = false prefix = "" case code.extension when 'mermaid' draw_diagram = true when 'seq', 'sequence' prefix = "sequenceDiagram\n" draw_diagram = true else Highlight.pbcopy_highlighted_code(code) insert_code_background activate_last_slide paste_clipboard end if draw_diagram code.source = prefix + code.source path = Diagram.generate_image_file(code) insert_image(path) File.unlink(path) end end
insert_image(path)
click to toggle source
Insert image to the last slide
# File lib/md2key/keynote.rb, line 49 def insert_image(path) execute_applescript('insert_image', slides_count, File.absolute_path(path), TEMPLATE_SLIDE_INDEX) end
insert_note(note)
click to toggle source
Insert presenter note
# File lib/md2key/keynote.rb, line 90 def insert_note(note) execute_applescript('insert_note', slides_count, note) end
insert_table(data)
click to toggle source
# File lib/md2key/keynote.rb, line 77 def insert_table(data) row_index = 1 data.each do |row| param = [slides_count, row_index] row.each do |cell| param << cell end execute_applescript('update_table', *param) row_index += 1 end end
update_cover(slide, master_name)
click to toggle source
You must provide a first slide as a cover slide. @param [Md2key::Nodes::Slide] slide
# File lib/md2key/keynote.rb, line 14 def update_cover(slide, master_name) execute_applescript('update_slide', slide.title, slide.lines.map(&:text).join("\n"), master_name, COVER_SLIDE_INDEX) end
Private Class Methods
activate_last_slide()
click to toggle source
# File lib/md2key/keynote.rb, line 111 def activate_last_slide execute_applescript('activate_slide', slides_count) end
create_indented_slide(slide, master_name)
click to toggle source
@param [Md2key::Nodes::Slide] slide @param [String] master_name
# File lib/md2key/keynote.rb, line 125 def create_indented_slide(slide, master_name) execute_applescript('create_slide_and_select_body', slide.title, master_name, TEMPLATE_SLIDE_INDEX) last_index = slide.lines.size - 1 current_indent = 0 slide.lines.each_with_index do |line, index| # Using copy and paste to input multibyte chars pbcopy(line.text) paste_and_indent(line.indent - current_indent, insert_newline: index < last_index) current_indent = line.indent end end
execute_applescript(script_name, *args)
click to toggle source
@return [String] - script's output
# File lib/md2key/keynote.rb, line 150 def execute_applescript(script_name, *args) path = script_path(script_name) script = ERB.new(File.read(path)).result IO.popen(['osascript', '-', *args.map(&:to_s)], 'r+') do |io| io.write(script) io.close_write io.read end end
insert_code_background()
click to toggle source
# File lib/md2key/keynote.rb, line 107 def insert_code_background execute_applescript('insert_code_background', slides_count, CODE_BACKGROUND_PATH) end
paste_and_indent(indent, insert_newline: true)
click to toggle source
# File lib/md2key/keynote.rb, line 145 def paste_and_indent(indent, insert_newline: true) execute_applescript('paste_and_indent', indent, insert_newline) end
paste_clipboard()
click to toggle source
# File lib/md2key/keynote.rb, line 115 def paste_clipboard execute_applescript('paste_clipboard') end
pbcopy(str)
click to toggle source
# File lib/md2key/keynote.rb, line 138 def pbcopy(str) IO.popen('pbcopy', 'w') do |io| io.write(str) io.close_write end end
script_path(script_name)
click to toggle source
# File lib/md2key/keynote.rb, line 160 def script_path(script_name) scripts_path = File.expand_path('../../scripts', __dir__) File.join(scripts_path, "#{script_name}.scpt.erb") end
slides_count()
click to toggle source
# File lib/md2key/keynote.rb, line 119 def slides_count execute_applescript('slides_count').to_i end