Module: Hokusai::Automation::KeysTranscoder

Defined in:
ui/src/hokusai/automation/keys_transcoder.rb

Constant Summary collapse

KEYS =
{
  shift: "\ue008",
  ctrl: "\ue009",
  alt: "\ue00A",
  super: "\ue03D",
  lshift: "\ue008",
  lctrl: "\ue009",
  lalt: "\ue00A",
  lsuper: "\ue03D",
  rshift: "\ue050",
  rctrl: "\ue051",
  ralt: "\ue052",
  rsuper: "\ue053",
  enter: "\ue007",
  tab: "\ue004",
  backspace: "\ue003",
  insert: "\ue016",
  delete: "\ue017",
  up: "\ue013",
  right: "\ue014",
  down: "\ue015",
  left: "\ue012",
  page_up: "\ue00E",
  page_down: "\ue00F",
  end: "\ue010",
  home: "\ue011",
  pause: "\ue00B",
  escape: "\ue00C",
  null: "\ue000",
  cancel: "\ue001",
  f1: "\ue031",
  f2: "\ue032",
  f3: "\ue033",
  f4: "\ue034",
  f5: "\ue035",
  f6: "\ue036",
  f7: "\ue037",
  f8: "\ue038",
  f9: "\ue039",
  f10: "\ue03A",
  f11: "\ue03B",
  f12: "\ue03C",
  kp0: "\ue01A",
  kp1: "\ue01B",
  kp2: "\ue01C",
  kp3: "\ue01D",
  kp4: "\ue01E",
  kp5: "\ue01F",
  kp6: "\ue020",
  kp7: "\ue021",
  kp8: "\ue022",
  kp9: "\ue023",
  multiply: "\ue024",
  add: "\ue025",
  separator: "\ue026",
  subtract: "\ue027",
  decimal: "\ue028",
  divide: "\ue029",
  equal: "\ue019",
  caps_lock: "\ue054",
  scroll_lock: "\ue055",
  num_lock: "\ue056",
  print_screen: "\ue057",
  kb_menu: "\ue058",
  back: "\ue059",
  menu: "\ue05A",
  volume_up: "\ue05B",
  volume_down: "\ue05C",
}
REVERSE_KEYS =
KEYS.invert

Class Method Summary collapse

Class Method Details

.[](key) ⇒ Object



75
76
77
78
79
# File 'ui/src/hokusai/automation/keys_transcoder.rb', line 75

def self.[](key)
  return KEYS[key] if KEYS[key]

  raise Hokusai::Automation::Error.new("Unsupported key: #{key}")
end

.decode(str) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'ui/src/hokusai/automation/keys_transcoder.rb', line 81

def self.decode(str)
  parts = str.split("")
  keys = []
  prog = []

  while part = parts.shift

    if key = REVERSE_KEYS[part]
      if key == :null
        keys << prog
        prog = []
      else
        prog << key
      end
    else
      prog << part.to_s
    end
  end

  keys.concat prog
  keys
end

.encode(keys) ⇒ Object



104
105
106
# File 'ui/src/hokusai/automation/keys_transcoder.rb', line 104

def self.encode(keys)
  keys.map { |key| encode_key(key) }.join("")
end

.encode_key(key) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'ui/src/hokusai/automation/keys_transcoder.rb', line 108

def self.encode_key(key)
  case key
  when Symbol
    self[key]
  when Array
    key = key.map do |e|
      if e.is_a?(Symbol)
        self[e]
      else
        e
      end
    end

    key << self[:null]
    key.join("")
  else
    key.to_s
  end
end