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
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
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