class Dotremap::Key

Constants

KEYCODE_MAP
PREFIX_EXPRESSION
PREFIX_MAP

Public Class Methods

new(expression) click to toggle source
# File lib/dotremap/key.rb, line 44
def initialize(expression)
  @expression = expression
end

Public Instance Methods

to_s() click to toggle source
# File lib/dotremap/key.rb, line 48
def to_s
  key_combination(@expression)
end

Private Instance Methods

key_combination(raw_combination) click to toggle source
# File lib/dotremap/key.rb, line 54
def key_combination(raw_combination)
  raw_prefixes, raw_key = split_key_combination(raw_combination)
  return key_expression(raw_key) if raw_prefixes.empty?

  prefixes = raw_prefixes.map { |raw_prefix| PREFIX_MAP[raw_prefix] }
  "#{key_expression(raw_key)}, #{prefixes.join(' | ')}"
end
key_expression(raw_key) click to toggle source
# File lib/dotremap/key.rb, line 62
def key_expression(raw_key)
  case raw_key
  when /^(#{KEYCODE_MAP.keys.map { |k| Regexp.escape(k) }.join('|')})$/
    "KeyCode::#{KEYCODE_MAP[raw_key]}"
  else
    raw_key = raw_key.upcase unless raw_key.match(/^VK_/)
    "KeyCode::#{raw_key}"
  end
end
split_key_combination(raw_combination) click to toggle source
# File lib/dotremap/key.rb, line 72
def split_key_combination(raw_combination)
  prefixes = []
  key = raw_combination.dup

  while key.match(/^#{PREFIX_EXPRESSION}/)
    key.gsub!(/^#{PREFIX_EXPRESSION}/) do
      prefixes << $1.gsub(/-$/, "")
      ""
    end
  end

  [prefixes, key]
end