class SublimeDSL::SublimeText::Menu::DSLReader

Public Class Methods

new(file = nil) click to toggle source
# File lib/sublime_dsl/sublime_text/menu.rb, line 160
def initialize(file = nil)
  @menus = []
  @item_stack = []
  instance_eval File.read(file, encoding: 'utf-8'), file if file
end

Public Instance Methods

_menus() click to toggle source
# File lib/sublime_dsl/sublime_text/menu.rb, line 166
def _menus
  @menus
end
item(*args, &block) click to toggle source
# File lib/sublime_dsl/sublime_text/menu.rb, line 177
def item(*args, &block)
  @item_stack.empty? and raise Error, "'item' is invalid outside of a menu block"
  item = new_item(args)
  @item_stack.last.items << item
  return unless block
  @item_stack.push item
  instance_eval(&block)
  @item_stack.pop
end
menu(name, &block) click to toggle source
method_missing(sym, *args, &block) click to toggle source
# File lib/sublime_dsl/sublime_text/menu.rb, line 187
def method_missing(sym, *args, &block)
  @item_stack.empty? and raise Error, "'#{sym}' is invalid outside of a menu block"
  Command.from_method_missing(sym, args)
end
new_item(args) click to toggle source
# File lib/sublime_dsl/sublime_text/menu.rb, line 192
def new_item(args)
  args.empty? and raise Error, "no argument for 'item'"
  item = Item.new

  # get the caption if any
  if args.first.is_a?(String)
    caption = args.shift
    caption =~ /&([^& ])/ and item.mnemonic = $1.upcase
    item.caption = caption.gsub(/&(.)/, '\1')
    return item if args.empty?
  end

  # get the command if any
  cmd = args.first
  if cmd.is_a?(Command)
    cmd.error and raise Error, "item '#{caption}': #{cmd.error}"
    item.command = cmd
    args.shift
    return item if args.empty?
  end

  # options
  options = args.first
  args.length == 1 && options.is_a?(Hash) or
    raise Error, "invalid arguments for 'item': #{args.inspect}"

  item.id = options.delete(:id)
  item.checkbox = options.delete(:checkbox)
  item.platform = options.delete(:platform)
  mnemonic = options.delete(:mnemonic)
  if mnemonic
    item.mnemonic && mnemonic != item.mnemonic and
      warn "item '#{caption}': mnemonic #{item.mnemonic} overwritten by #{mnemonic}"
    item.mnemonic = mnemonic
  end

  item
end