001/* 002 * Copyright (C) 2012 eXo Platform SAS. 003 * 004 * This is free software; you can redistribute it and/or modify it 005 * under the terms of the GNU Lesser General Public License as 006 * published by the Free Software Foundation; either version 2.1 of 007 * the License, or (at your option) any later version. 008 * 009 * This software is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * You should have received a copy of the GNU Lesser General Public 015 * License along with this software; if not, write to the Free 016 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 017 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 018 */ 019package org.crsh.console; 020 021import jline.console.Operation; 022 023import java.util.HashMap; 024 025/** 026 * @author Julien Viet 027 */ 028public enum KeyType { 029 030 A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z, 031 a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z, 032 _0,_1,_2,_3,_4,_5,_6,_7,_8,_9, 033 034 SPACE, 035 036 UP,DOWN,LEFT,RIGHT, 037 038 DELETE,BACKSPACE,ENTER, 039 040 UNKNOWN 041 042 ; 043 044 private static KeyType[] INDEX = new KeyType[256]; 045 046 static { 047 INDEX[' '] = SPACE; 048 INDEX['0'] = _0; 049 INDEX['1'] = _1; 050 INDEX['2'] = _2; 051 INDEX['3'] = _3; 052 INDEX['4'] = _4; 053 INDEX['5'] = _5; 054 INDEX['6'] = _6; 055 INDEX['7'] = _7; 056 INDEX['8'] = _8; 057 INDEX['9'] = _9; 058 INDEX['A'] = A; 059 INDEX['B'] = B; 060 INDEX['C'] = C; 061 INDEX['D'] = D; 062 INDEX['E'] = E; 063 INDEX['F'] = F; 064 INDEX['G'] = G; 065 INDEX['H'] = H; 066 INDEX['I'] = I; 067 INDEX['J'] = J; 068 INDEX['K'] = K; 069 INDEX['L'] = L; 070 INDEX['M'] = M; 071 INDEX['N'] = N; 072 INDEX['O'] = O; 073 INDEX['P'] = P; 074 INDEX['Q'] = Q; 075 INDEX['R'] = R; 076 INDEX['S'] = S; 077 INDEX['T'] = T; 078 INDEX['U'] = U; 079 INDEX['V'] = V; 080 INDEX['W'] = W; 081 INDEX['X'] = X; 082 INDEX['Y'] = Y; 083 INDEX['Z'] = Z; 084 INDEX['a'] = a; 085 INDEX['b'] = b; 086 INDEX['c'] = c; 087 INDEX['d'] = d; 088 INDEX['e'] = e; 089 INDEX['f'] = f; 090 INDEX['g'] = g; 091 INDEX['h'] = h; 092 INDEX['i'] = i; 093 INDEX['j'] = j; 094 INDEX['k'] = k; 095 INDEX['l'] = l; 096 INDEX['m'] = m; 097 INDEX['n'] = n; 098 INDEX['o'] = o; 099 INDEX['p'] = p; 100 INDEX['q'] = q; 101 INDEX['r'] = r; 102 INDEX['s'] = s; 103 INDEX['t'] = t; 104 INDEX['u'] = u; 105 INDEX['v'] = v; 106 INDEX['w'] = w; 107 INDEX['x'] = x; 108 INDEX['y'] = y; 109 INDEX['z'] = z; 110 } 111 112 /** . */ 113 114 115 static KeyType map(Operation operation, int[] sequence) { 116 switch (operation) { 117 case SELF_INSERT: 118 if (sequence.length == 1) { 119 int index = sequence[0]; 120 if (index >= 0 && index < INDEX.length) { 121 KeyType found = INDEX[index]; 122 if (found != null) { 123 return found; 124 } 125 } 126 } 127 break; 128 case BACKWARD_CHAR: 129 return LEFT; 130 case FORWARD_CHAR: 131 return RIGHT; 132 case PREVIOUS_HISTORY: 133 return UP; 134 case NEXT_HISTORY: 135 return DOWN; 136 case BACKWARD_DELETE_CHAR: 137 return BACKSPACE; 138 case DELETE_CHAR: 139 return DELETE; 140 case ACCEPT_LINE: 141 return ENTER; 142 } 143 return UNKNOWN; 144 } 145 146}