This repository has been archived on 2020-04-04. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
Vim-Vixen/src/shared/settings/KeySequence.ts
2019-10-07 12:31:13 +00:00

54 lines
1.1 KiB
TypeScript

import Key from '../../shared/settings/Key';
export default class KeySequence {
constructor(
public readonly keys: Key[],
) {
}
push(key: Key): number {
return this.keys.push(key);
}
length(): number {
return this.keys.length;
}
startsWith(o: KeySequence): boolean {
if (this.keys.length < o.keys.length) {
return false;
}
for (let i = 0; i < o.keys.length; ++i) {
if (!this.keys[i].equals(o.keys[i])) {
return false;
}
}
return true;
}
static fromMapKeys(keys: string): KeySequence {
const fromMapKeysRecursive = (
remaining: string, mappedKeys: Key[],
): Key[] => {
if (remaining.length === 0) {
return mappedKeys;
}
let nextPos = 1;
if (remaining.startsWith('<')) {
let ltPos = remaining.indexOf('>');
if (ltPos > 0) {
nextPos = ltPos + 1;
}
}
return fromMapKeysRecursive(
remaining.slice(nextPos),
mappedKeys.concat([Key.fromMapKey(remaining.slice(0, nextPos))])
);
};
let data = fromMapKeysRecursive(keys, []);
return new KeySequence(data);
}
}