package org.ninjadev.multivim.commandparser;
import java.util.EnumSet;
import java.util.HashMap;
import org.ninjadev.multivim.commandparser.normalvisualcommands.*;
import org.ninjadev.multivim.commandparser.normalvisualcommands.Error;
import org.ninjadev.multivim.commandparser.operators.Movement;
import com.googlecode.lanterna.input.Key;
import com.googlecode.lanterna.input.Key.Kind;
public class NormalVisualCommandTable{
public static HashMap<Key, NormalVisualCommand> table;
private static void entry(NormalVisualCommand normalVisualCommand){
table.put(normalVisualCommand.commandKey, normalVisualCommand);
}
public static NormalVisualCommand get(Key key){
NormalVisualCommand nvc = table.get(key);
return nvc == null ? table.get(new Key('\0', false, false)) : nvc;
}
static{
table = new HashMap<Key, NormalVisualCommand>();
boolean F = false;
boolean T = true;
int FALSE = 0;
int TRUE = 1;
int BACKWARD = 3;
int FORWARD = 4;
int SEARCH_REV = 12;
int BL_WHITE = 13;
int BL_FIX = 14;
/* | command | char | ctrl | alt | flags | args | */
entry(new Error (new Key( '\0' , F , F ), null, 0 ));
entry(new AddSub (new Key( 'a' , T , F ), null, 0 ));
entry(new Page (new Key( 'b' , T , F ), EnumSet.of(NormalVisualFlag.MayStopSelectionWithoutShiftModifier), BACKWARD));
entry(new Esc (new Key( 'c' , T , F ), null, TRUE ));
entry(new HalfPage (new Key( 'd' , T , F ), null, 0 ));
entry(new ScrollLine (new Key( 'e' , T , F ), null, TRUE ));
entry(new Page (new Key( 'f' , T , F ), EnumSet.of(NormalVisualFlag.MayStopSelectionWithoutShiftModifier), FORWARD));
entry(new CtrlG (new Key( 'g' , T , F ), null, 0 ));
entry(new CtrlH (new Key( 'h' , T , F ), null, 0 ));
entry(new PCMark (new Key( 'i' , T , F ), null, 0 ));
entry(new Down (new Key( Kind.Enter ), null, FALSE ));
entry(new Error (new Key( 'k' , T , F ), null, 0 ));
entry(new Clear (new Key( 'l' , T , F ), null, 0 ));
entry(new Down (new Key( 'm' , T , F ), null, TRUE ));
entry(new Down (new Key( 'n' , T , F ), EnumSet.of(NormalVisualFlag.MayStopSelectionWithoutShiftModifier), FALSE));
entry(new CtrlO (new Key( 'o' , T , F ), null, 0 ));
entry(new Up (new Key( 'p' , T , F ), EnumSet.of(NormalVisualFlag.MayStopSelectionWithoutShiftModifier), FALSE));
entry(new Visual (new Key( 'q' , T , F ), null, FALSE ));
entry(new Redo (new Key( 'r' , T , F ), null, 0 ));
entry(new Ignore (new Key( 's' , T , F ), null, 0 ));
entry(new TagPop (new Key( 't' , T , F ), EnumSet.of(NormalVisualFlag.NotAllowedInCommandLineWindow), 0));
entry(new HalfPage (new Key( 'u' , T , F ), null, 0 ));
entry(new Visual (new Key( 'v' , T , F ), null, FALSE ));
entry(new Visual (new Key( 'V' , F , F ), null, FALSE ));
entry(new Visual (new Key( 'v' , F , F ), null, FALSE ));
entry(new Window (new Key( 'w' , T , F ), null, 0 ));
entry(new AddSub (new Key( 'x' , T , F ), null, 0 ));
entry(new ScrollLine (new Key( 'y' , T , F ), null, FALSE ));
entry(new Suspend (new Key( 'z' , T , F ), null, 0 ));
entry(new Esc (new Key( Kind.Escape ), null, FALSE ));
entry(new Normal (new Key( '\\', T , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharAlways
), 0));
entry(new Ident (new Key( ']' , T , F ), EnumSet.of(NormalVisualFlag.MayNeedSecondChar), 0));
entry(new Hat (new Key( '^' , T , F ), EnumSet.of(NormalVisualFlag.MayNeedSecondChar), 0));
entry(new Error (new Key( '_' , T , F ), null, 0 ));
entry(new Right (new Key( ' ' , F , F ), null, 0 ));
entry(new Operator (new Key( '!' , F , F ), null, 0 ));
entry(new Regname (new Key( '"' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharWhenNoOperatorPending,
NormalVisualFlag.KeepRegisterName
), 0));
entry(new Ident (new Key( '#' , F , F ), null, 0 ));
entry(new Dollar (new Key( '$' , F , F ), null, 0 ));
entry(new Percent (new Key( '%' , F , F ), null, 0 ));
entry(new Optrans (new Key( '&' , F , F ), null, 0 ));
entry(new GoMark (new Key( '\'', F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharAlways
), TRUE));
entry(new Brace (new Key( '(' , F , F ), null, BACKWARD ));
entry(new Brace (new Key( ')' , F , F ), null, FORWARD ));
entry(new Ident (new Key( '*' , F , F ), null, 0 ));
entry(new Down (new Key( '+' , F , F ), null, TRUE ));
entry(new CSearch (new Key( ',' , F , F ), null, TRUE ));
entry(new Up (new Key( '-' , F , F ), null, TRUE ));
entry(new Dot (new Key( '.' , F , F ), EnumSet.of(NormalVisualFlag.KeepRegisterName), 0));
entry(new Search (new Key( '/' , F , F ), null, FALSE ));
entry(new BeginLine (new Key( '0' , F , F ), null, 0 ));
entry(new Ignore (new Key( '1' , F , F ), null, 0 ));
entry(new Ignore (new Key( '2' , F , F ), null, 0 ));
entry(new Ignore (new Key( '3' , F , F ), null, 0 ));
entry(new Ignore (new Key( '4' , F , F ), null, 0 ));
entry(new Ignore (new Key( '5' , F , F ), null, 0 ));
entry(new Ignore (new Key( '6' , F , F ), null, 0 ));
entry(new Ignore (new Key( '7' , F , F ), null, 0 ));
entry(new Ignore (new Key( '8' , F , F ), null, 0 ));
entry(new Ignore (new Key( '9' , F , F ), null, 0 ));
entry(new Colon (new Key( ':' , F , F ), null, 0 ));
entry(new CSearch (new Key( ';' , F , F ), null, FALSE ));
entry(new Operator (new Key( '<' , F , F ), EnumSet.of(NormalVisualFlag.RightLeftModifiesCommand), 0));
entry(new Operator (new Key( '=' , F , F ), null, 0 ));
entry(new Operator (new Key( '>' , F , F ), EnumSet.of(NormalVisualFlag.RightLeftModifiesCommand), 0));
entry(new Search (new Key( '?' , F , F ), null, FALSE ));
entry(new At (new Key( '@' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharWhenNoOperatorPending
), FALSE));
entry(new Edit (new Key( 'A' , F , F ), null, 0 ));
entry(new BackWord (new Key( 'B' , F , F ), null, 0 ));
entry(new Abbrev (new Key( 'C' , F , F ), EnumSet.of(NormalVisualFlag.KeepRegisterName), 0));
entry(new Abbrev (new Key( 'D' , F , F ), EnumSet.of(NormalVisualFlag.KeepRegisterName), 0));
entry(new WordCommand (new Key( 'E' , F , F ), null, TRUE ));
entry(new CSearch (new Key( 'F' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharAlways,
NormalVisualFlag.SecondCharNeedsLanguageAdjustment
), BACKWARD));
entry(new Goto (new Key( 'G' , F , F ), null, TRUE ));
entry(new Scroll (new Key( 'H' , F , F ), null, 0 ));
entry(new Edit (new Key( 'I' , F , F ), null, 0 ));
entry(new Join (new Key( 'J' , F , F ), null, 0 ));
entry(new Ident (new Key( 'K' , F , F ), null, 0 ));
entry(new Scroll (new Key( 'L' , F , F ), null, 0 ));
entry(new Scroll (new Key( 'M' , F , F ), null, 0 ));
entry(new Next (new Key( 'N' , F , F ), null, SEARCH_REV ));
entry(new Open (new Key( 'O' , F , F ), null, 0 ));
entry(new Put (new Key( 'P' , F , F ), null, 0 ));
entry(new ExMode (new Key( 'Q' , F , F ), EnumSet.of(NormalVisualFlag.MayNeedSecondChar), 0));
entry(new Replace (new Key( 'R' , F , F ), null, FALSE ));
entry(new Subst (new Key( 'S' , F , F ), EnumSet.of(NormalVisualFlag.KeepRegisterName), 0));
entry(new CSearch (new Key( 'T' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharAlways,
NormalVisualFlag.SecondCharNeedsLanguageAdjustment
), BACKWARD));
entry(new Undo (new Key( 'U' , F , F ), null, 0 ));
entry(new WordCommand (new Key( 'W' , F , F ), null, TRUE ));
entry(new Abbrev (new Key( 'X' , F , F ), EnumSet.of(NormalVisualFlag.KeepRegisterName) , 0 ));
entry(new Abbrev (new Key( 'Y' , F , F ), EnumSet.of(NormalVisualFlag.KeepRegisterName) , 0 ));
entry(new Zet (new Key( 'Z' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharWhenNoOperatorPending,
NormalVisualFlag.NotAllowedInCommandLineWindow
), 0));
entry(new Brackets (new Key( '[' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharAlways
), BACKWARD));
entry(new Error (new Key( '\\', F , F ), null, 0 ));
entry(new Brackets (new Key( ']' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharAlways
), FORWARD));
entry(new BeginLine (new Key( '^' , F , F ), null, BL_WHITE|BL_FIX));
entry(new LineOp (new Key( '_' , F , F ), null, 0 ));
entry(new GoMark (new Key( '`' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharAlways
), FALSE));
entry(new Edit (new Key( 'a' , F , F ), EnumSet.of(NormalVisualFlag.MayNeedSecondChar), 0));
entry(new WordCommand (new Key( 'b' , F , F ), null, 0 ));
entry(new Operator (new Key( 'c' , F , F ), null, 0 ));
entry(new Operator (new Key( 'd' , F , F ), null, 0 ));
entry(new WordCommand (new Key( 'e' , F , F ), null, FALSE ));
entry(new CSearch (new Key( 'f' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharAlways,
NormalVisualFlag.SecondCharNeedsLanguageAdjustment
), FORWARD));
entry(new GCommand (new Key( 'g' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharAlways
), FALSE));
entry(new Left (new Key( 'h' , F , F ), EnumSet.of(NormalVisualFlag.RightLeftModifiesCommand) , 0 ));
entry(new Edit (new Key( 'i' , F , F ), EnumSet.of(NormalVisualFlag.MayNeedSecondChar) , 0 ));
entry(new Down (new Key( 'j' , F , F ), null, FALSE ));
entry(new Up (new Key( 'k' , F , F ), null, FALSE ));
entry(new Right (new Key( 'l' , F , F ), EnumSet.of(NormalVisualFlag.RightLeftModifiesCommand) , 0 ));
entry(new Mark (new Key( 'm' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharWhenNoOperatorPending
), 0));
entry(new Next (new Key( 'n' , F , F ), null, 0 ));
entry(new Open (new Key( 'o' , F , F ), null, 0 ));
entry(new Put (new Key( 'p' , F , F ), null, 0 ));
entry(new Record (new Key( 'q' , F , F ), EnumSet.of(NormalVisualFlag.MayNeedSecondChar) , 0 ));
entry(new Replace (new Key( 'r' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharWhenNoOperatorPending,
NormalVisualFlag.SecondCharNeedsLanguageAdjustment
), 0));
entry(new Subst (new Key( 's' , F , F ), EnumSet.of(NormalVisualFlag.KeepRegisterName) , 0 ));
entry(new CSearch (new Key( 't' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharAlways,
NormalVisualFlag.SecondCharNeedsLanguageAdjustment
), FORWARD));
entry(new Undo (new Key( 'u' , F , F ), null, 0 ));
entry(new WordCommand (new Key( 'w' , F , F ), null, FALSE ));
entry(new Abbrev (new Key( 'x' , F , F ), EnumSet.of(NormalVisualFlag.KeepRegisterName) , 0 ));
entry(new Operator (new Key( 'y' , F , F ), null, 0 ));
entry(new Zet (new Key( 'z' , F , F ), EnumSet.of(
NormalVisualFlag.MayNeedSecondChar,
NormalVisualFlag.NeedSecondCharAlways
) , 0 ));
entry(new FindPar (new Key( '{' , F , F ), null, BACKWARD ));
entry(new Pipe (new Key( '|' , F , F ), null, 0 ));
entry(new FindPar (new Key( '}' , F , F ), null, FORWARD ));
entry(new Tilde (new Key( '~' , F , F ), null, 0 ));
entry(new Ident (new Key( '�' , F , F ), null, 0 ));
entry(new Ignore (new Key( Kind.Ignore ), EnumSet.of(NormalVisualFlag.KeepRegisterName) , 0 ));
entry(new Nop (new Key( Kind.Nop ), null, 0 ));
entry(new Edit (new Key( Kind.Insert ), null, 0 ));
entry(new CtrlH (new Key( Kind.Backspace ), null, 0 ));
entry(new Up (new Key( Kind.ArrowUp ), EnumSet.of(
NormalVisualFlag.MayStartSelectionWithShiftModifier,
NormalVisualFlag.MayStopSelectionWithoutShiftModifier
), FALSE));
entry(new Down (new Key( Kind.ArrowDown ), EnumSet.of(
NormalVisualFlag.MayStartSelectionWithShiftModifier,
NormalVisualFlag.MayStopSelectionWithoutShiftModifier
), FALSE));
entry(new Left (new Key( Kind.ArrowLeft ), EnumSet.of(
NormalVisualFlag.MayStartSelectionWithShiftModifier,
NormalVisualFlag.MayStopSelectionWithoutShiftModifier
), 0));
entry(new Right (new Key( Kind.ArrowRight ), EnumSet.of(
NormalVisualFlag.MayStartSelectionWithShiftModifier,
NormalVisualFlag.MayStopSelectionWithoutShiftModifier,
NormalVisualFlag.RightLeftModifiesCommand
), 0));
entry(new Page (new Key( Kind.PageUp ), EnumSet.of(
NormalVisualFlag.MayStartSelectionWithShiftModifier,
NormalVisualFlag.MayStopSelectionWithoutShiftModifier
), BACKWARD ));
entry(new Page (new Key( Kind.PageDown ), EnumSet.of(
NormalVisualFlag.MayStartSelectionWithShiftModifier,
NormalVisualFlag.MayStopSelectionWithoutShiftModifier
), FORWARD ));
entry(new End (new Key( Kind.End ), EnumSet.of(
NormalVisualFlag.MayStartSelectionWithShiftModifier,
NormalVisualFlag.MayStopSelectionWithoutShiftModifier
), FALSE ));
entry(new Home (new Key( Kind.Home ), EnumSet.of(
NormalVisualFlag.MayStartSelectionWithShiftModifier,
NormalVisualFlag.MayStopSelectionWithoutShiftModifier
), 0 ));
entry(new Abbrev (new Key( Kind.Delete ), null, 0 ));
entry(new Help (new Key( Kind.F1 ), EnumSet.of(NormalVisualFlag.NotAllowedInCommandLineWindow), 0));
}
}