package org.geogebra.common.gui.inputfield;
import java.util.HashMap;
import org.geogebra.common.kernel.arithmetic.ExpressionNodeConstants;
import org.geogebra.common.util.lang.Unicode;
public class AltKeys {
private static HashMap<Character, String> lookupLower = null,
lookupUpper = null;
private static void init(boolean chromeApp) {
lookupLower = new HashMap<Character, String>();
lookupUpper = new HashMap<Character, String>();
lookupLower.put('A', Unicode.alpha + "");
lookupUpper.put('A', Unicode.Alpha + "");
lookupLower.put('B', Unicode.beta + "");
lookupUpper.put('B', Unicode.Beta + "");
lookupLower.put('D', Unicode.delta + "");
lookupUpper.put('D', Unicode.Delta + "");
lookupLower.put('E', " " + Unicode.EULER_STRING + " ");
lookupUpper.put('E', " " + Unicode.EULER_STRING + " ");
lookupLower.put('F', Unicode.phi_symbol + "");
lookupUpper.put('F', Unicode.Phi + "");
lookupLower.put('G', Unicode.gamma + "");
lookupUpper.put('G', Unicode.Gamma + "");
lookupLower.put('I', " " + Unicode.IMAGINARY + " ");
lookupUpper.put('I', " " + Unicode.IMAGINARY + " ");
lookupLower.put('L', Unicode.lambda + "");
lookupUpper.put('L', Unicode.Lambda + "");
lookupLower.put('M', Unicode.mu + "");
lookupUpper.put('M', Unicode.Mu + "");
lookupLower.put('O', Unicode.DEGREE);
lookupUpper.put('O', Unicode.DEGREE);
lookupLower.put('P', " " + Unicode.pi + " ");
lookupUpper.put('P', Unicode.Pi + "");
lookupLower.put('R', Unicode.SQUARE_ROOT + "");
lookupUpper.put('R', Unicode.SQUARE_ROOT + "");
lookupLower.put('S', Unicode.sigma + "");
lookupUpper.put('S', Unicode.Sigma + "");
lookupLower.put('T', Unicode.theta + "");
lookupUpper.put('T', Unicode.Theta + "");
lookupLower.put('U', Unicode.INFINITY + "");
lookupUpper.put('U', Unicode.INFINITY + "");
lookupLower.put('W', Unicode.omega + "");
lookupUpper.put('W', Unicode.Omega + "");
lookupLower.put('0', Unicode.Superscript_0 + "");
lookupLower.put('1', Unicode.Superscript_1 + "");
lookupLower.put('2', Unicode.Superscript_2 + "");
lookupLower.put('3', Unicode.Superscript_3 + "");
lookupLower.put('4', Unicode.Superscript_4 + "");
lookupLower.put('5', Unicode.Superscript_5 + "");
lookupLower.put('6', Unicode.Superscript_6 + "");
lookupLower.put('7', Unicode.Superscript_7 + "");
lookupLower.put('8', Unicode.Superscript_8 + "");
lookupUpper.put('8', ExpressionNodeConstants.strVECTORPRODUCT);
lookupLower.put('9', Unicode.Superscript_9 + "");
lookupUpper.put('*', ExpressionNodeConstants.strVECTORPRODUCT);
lookupLower.put('*', ExpressionNodeConstants.strVECTORPRODUCT);
lookupUpper.put('+', Unicode.PLUSMINUS);
lookupLower.put('+', Unicode.PLUSMINUS);
lookupUpper.put(Unicode.eGrave, "{"); // Italian keyboards
lookupLower.put(Unicode.eGrave, "["); // Italian keyboards
lookupUpper.put(Unicode.eAcute, "{"); // Italian keyboards
lookupLower.put(Unicode.eAcute, "["); // Italian keyboards
lookupUpper.put('=', Unicode.NOTEQUAL);
lookupLower.put('=', Unicode.NOTEQUAL);
lookupUpper.put('-', Unicode.Superscript_Minus + "");
lookupLower.put('-', Unicode.Superscript_Minus + "");
lookupUpper.put(',', Unicode.LESS_EQUAL + "");
lookupLower.put(',', Unicode.LESS_EQUAL + "");
lookupUpper.put('<', Unicode.LESS_EQUAL + "");
lookupLower.put('<', Unicode.LESS_EQUAL + "");
lookupUpper.put('.', Unicode.GREATER_EQUAL + "");
lookupLower.put('.', Unicode.GREATER_EQUAL + "");
lookupUpper.put('>', Unicode.GREATER_EQUAL + "");
lookupLower.put('>', Unicode.GREATER_EQUAL + "");
if (chromeApp) {
// these keycodes also work in Safari 5.1.2 (Win 7), Firefox 12 (Win
// 7) and Chrome 20 on Chromebook
// on Chrome 18 (Win 7), Alt-Keypad* gives character 106
lookupUpper.put((char) 106,
ExpressionNodeConstants.strVECTORPRODUCT);
lookupLower.put((char) 106,
ExpressionNodeConstants.strVECTORPRODUCT);
// on Chrome, Alt-Keypad+ gives character 107
lookupUpper.put((char) 107, Unicode.PLUSMINUS);
lookupLower.put((char) 107, Unicode.PLUSMINUS);
// on Chrome, Alt-Keypad- gives character 109
lookupUpper.put((char) 109, Unicode.Superscript_Minus + "");
lookupLower.put((char) 109, Unicode.Superscript_Minus + "");
// on Chrome, Alt-= gives character 187 (>>)
lookupUpper.put((char) 187, Unicode.NOTEQUAL + "");
lookupLower.put((char) 187, Unicode.NOTEQUAL + "");
// on Chrome, Alt-, gives character 188 (1/4)
lookupUpper.put((char) 188, Unicode.LESS_EQUAL + "");
lookupLower.put((char) 188, Unicode.LESS_EQUAL + "");
// on Chrome, Alt-- gives character 189 (1/2)
lookupUpper.put((char) 189, Unicode.Superscript_Minus + "");
lookupLower.put((char) 189, Unicode.Superscript_Minus + "");
// on Chrome, Alt-. gives character 190 (3/4)
lookupUpper.put((char) 190, Unicode.GREATER_EQUAL + "");
lookupLower.put((char) 190, Unicode.GREATER_EQUAL + "");
}
}
/**
* check for eg alt-a for alpha check for eg alt-shift-a for upper case
* alpha
*
* @param keyCode
* Key code without modifiers.
* @param isShiftDown
* Determines if shift is down,
* @param webApp
* whether we run this in a browser
* @return The "alpha-string" ie the symbols.
*/
public static String getAltSymbols(int keyCode, boolean isShiftDown,
boolean webApp) {
if (lookupUpper == null) {
init(webApp);
}
if (isShiftDown) {
return AltKeys.lookupUpper.get((char) keyCode);
}
if (keyCode >= 'a' && keyCode <= 'z') {
return AltKeys.lookupLower.get((char) (keyCode + 'A' - 'a'));
}
return AltKeys.lookupLower.get((char) keyCode);
}
}