Index: /trunk/autoquest-misc/.classpath
===================================================================
--- /trunk/autoquest-misc/.classpath	(revision 901)
+++ /trunk/autoquest-misc/.classpath	(revision 901)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry including="**/*.java" kind="src" path="src/main/resources"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
Index: /trunk/autoquest-misc/.project
===================================================================
--- /trunk/autoquest-misc/.project	(revision 901)
+++ /trunk/autoquest-misc/.project	(revision 901)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>quest-misc</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
Index: /trunk/autoquest-misc/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- /trunk/autoquest-misc/.settings/org.eclipse.jdt.core.prefs	(revision 901)
+++ /trunk/autoquest-misc/.settings/org.eclipse.jdt.core.prefs	(revision 901)
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.6
Index: /trunk/autoquest-misc/.settings/org.eclipse.m2e.core.prefs
===================================================================
--- /trunk/autoquest-misc/.settings/org.eclipse.m2e.core.prefs	(revision 901)
+++ /trunk/autoquest-misc/.settings/org.eclipse.m2e.core.prefs	(revision 901)
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
Index: /trunk/autoquest-misc/pom.xml
===================================================================
--- /trunk/autoquest-misc/pom.xml	(revision 901)
+++ /trunk/autoquest-misc/pom.xml	(revision 901)
@@ -0,0 +1,20 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <groupId>de.ugoe.cs.quest</groupId>
+    <artifactId>quest</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>quest-misc</artifactId>
+  <name>quest-misc</name>
+  <scm>
+    <url>${quest-scm-trunk-dir}/quest-misc</url>
+  </scm>
+  <dependencies>
+    <dependency>
+      <groupId>de.ugoe.cs</groupId>
+      <artifactId>java-utils</artifactId>
+      <version>0.0.1-SNAPSHOT</version>
+    </dependency>
+  </dependencies>
+</project>
Index: /trunk/autoquest-misc/src/main/java/de/ugoe/cs/quest/CommandHelpers.java
===================================================================
--- /trunk/autoquest-misc/src/main/java/de/ugoe/cs/quest/CommandHelpers.java	(revision 901)
+++ /trunk/autoquest-misc/src/main/java/de/ugoe/cs/quest/CommandHelpers.java	(revision 901)
@@ -0,0 +1,56 @@
+package de.ugoe.cs.quest;
+
+import java.util.logging.Level;
+
+import de.ugoe.cs.util.console.Console;
+
+/**
+ * <p>
+ * Helper class that collects methods that are often used by the commands.
+ * </p>
+ * 
+ * @author Steffen Herbold
+ * @version 1.0
+ */
+public class CommandHelpers {
+
+	/**
+	 * <p>
+	 * Prints a message to error stream of the {@link Console} that an object
+	 * has not been found in the storage.
+	 * </p>
+	 * 
+	 * @param objectName
+	 *            name of the object
+	 */
+	public static void objectNotFoundMessage(String objectName) {
+		Console.printerrln("Object " + objectName + " not found in storage.");
+	}
+
+	/**
+	 * <p>
+	 * Prints a message to the error stream of the {@link Console} that an
+	 * object is not of an expected type.
+	 * </p>
+	 * 
+	 * @param objectName
+	 *            name of the object
+	 * @param type
+	 *            expected type
+	 */
+	public static void objectNotType(String objectName, String type) {
+		Console.printerrln("Object " + objectName + "not of type " + type + ".");
+	}
+
+	/**
+	 * <p>
+	 * Prints a message to the trace stream of the {@link Console} that an
+	 * object in the storage has been overwritten.
+	 * </p>
+	 * 
+	 * @param objectName
+	 */
+	public static void dataOverwritten(String objectName) {
+		Console.traceln(Level.INFO, "Existing object " + objectName + " overwritten.");
+	}
+}
Index: /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/KeyStroke.java
===================================================================
--- /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/KeyStroke.java	(revision 901)
+++ /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/KeyStroke.java	(revision 901)
@@ -0,0 +1,243 @@
+
+package de.ugoe.cs.tasktree.keyboardmaps;
+
+/**
+ * <p>
+ * This class is used to define key strokes.
+ * </p>
+ * 
+ * @version 1.0
+ * @author Patrick Harms
+ */
+public class KeyStroke {
+
+    /**
+     * <p>
+     * Name of the key stroke.
+     * </p>
+     */
+    private String keyStrokeName;
+
+    /**
+     * <p>
+     * {@link VirtualKey} associated with the key stroke.
+     * </p>
+     */
+    private VirtualKey virtualKey;
+
+    /**
+     * <p>
+     * Defines whether numlock is pressed during the stroke.
+     * </p>
+     */
+    private boolean numlock;
+
+    /**
+     * <p>
+     * Defines whether localstate is pressed during the stroke.
+     * </p>
+     */
+    private boolean localstate;
+
+    /**
+     * <p>
+     * Defines whether shift is pressed during the stroke.
+     * </p>
+     */
+    private boolean shift;
+
+    /**
+     * <p>
+     * Defines whether altgr is pressed during the stroke.
+     * </p>
+     */
+    private boolean altgr;
+
+    /**
+     * <p>
+     * Defines whether inhibit is pressed during the stroke.
+     * </p>
+     */
+    private boolean inhibit;
+
+    /**
+     * <p>
+     * Defines the character in which the key stroke results.
+     * </p>
+     */
+    private char character;
+
+    /**
+     * <p>
+     * Constructor. Creates a new key stroke
+     * </p>
+     * 
+     * @param keyStrokeName
+     *            name of the key stroke
+     * @param virtualKey
+     *            virtual key associated with the key stroke
+     * @param numlock
+     *            defines whether numlock is pressed during the key stroke
+     * @param localstate
+     *            defines whether localstate is pressed during the key stroke
+     * @param shift
+     *            defines whether shift is pressed during the key stroke
+     * @param altgr
+     *            defines whether altgr is pressed during the key stroke
+     * @param inhibit
+     *            defines whether inhibit is pressed during the key stroke
+     * @param character
+     *            defines that character in which the key stroke results
+     */
+    public KeyStroke(String keyStrokeName,
+                     VirtualKey virtualKey,
+                     boolean numlock,
+                     boolean localstate,
+                     boolean shift,
+                     boolean altgr,
+                     boolean inhibit,
+                     char character)
+    {
+        this.keyStrokeName = keyStrokeName;
+        this.virtualKey = virtualKey;
+        this.numlock = numlock;
+        this.localstate = localstate;
+        this.shift = shift;
+        this.altgr = altgr;
+        this.inhibit = inhibit;
+        this.character = character;
+    }
+
+    /**
+     * <p>
+     * Returns the name of the key stroke.
+     * </p>
+     * 
+     * @return the name
+     */
+    public String getKeyStrokeName() {
+        return keyStrokeName;
+    }
+
+    /**
+     * <p>
+     * Returns the virtual key associated with the key stroke.
+     * </p>
+     * 
+     * @return the virtual key
+     */
+    public VirtualKey getVirtualKey() {
+        return virtualKey;
+    }
+
+    /**
+     * <p>
+     * Returns the character in which the key stroke results.
+     * </p>
+     * 
+     * @return the character
+     */
+    public char getCharacter() {
+        return character;
+    }
+
+    /**
+     * <p>
+     * Returns whether inhibit is pressed.
+     * </p>
+     * 
+     * @return true if pressed; false otherwise
+     */
+    public boolean getInhibit() {
+        return inhibit;
+    }
+
+    /**
+     * <p>
+     * Returns whether altgr is pressed.
+     * </p>
+     * 
+     * @return true if pressed; false otherwise
+     */
+    public boolean getAltgr() {
+        return altgr;
+    }
+
+    /**
+     * <p>
+     * Returns whether shift is pressed.
+     * </p>
+     * 
+     * @return true if pressed; false otherwise
+     */
+    public boolean getShift() {
+        return shift;
+    }
+
+    /**
+     * <p>
+     * Returns whether localstate is pressed.
+     * </p>
+     * 
+     * @return true if pressed; false otherwise
+     */
+    public boolean getLocalstate() {
+        return localstate;
+    }
+
+    /**
+     * <p>
+     * Returns whether numlock is pressed.
+     * </p>
+     * 
+     * @return true if pressed; false otherwise
+     */
+    public boolean getNumlock() {
+        return numlock;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        StringBuffer toString = new StringBuffer();
+        toString.append("KeyStroke(");
+        toString.append(keyStrokeName);
+        toString.append(", ");
+        toString.append(virtualKey);
+
+        if (character != Character.UNASSIGNED) {
+            toString.append(", \'");
+            toString.append(character);
+            toString.append("\'");
+        }
+
+        if (shift) {
+            toString.append(", shift");
+        }
+
+        if (altgr) {
+            toString.append(", altgr");
+        }
+
+        if (numlock) {
+            toString.append(", numlock");
+        }
+
+        if (localstate) {
+            toString.append(", localstate");
+        }
+
+        if (inhibit) {
+            toString.append(", inhibit");
+        }
+
+        toString.append(")");
+
+        return toString.toString();
+    }
+
+}
Index: /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/KeyboardMap.java
===================================================================
--- /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/KeyboardMap.java	(revision 901)
+++ /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/KeyboardMap.java	(revision 901)
@@ -0,0 +1,2118 @@
+
+package de.ugoe.cs.tasktree.keyboardmaps;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.logging.Level;
+
+import de.ugoe.cs.util.console.Console;
+
+/**
+ * <p>
+ * Helper class that maps keyboard input based on a key map.
+ * </p>
+ * 
+ * @version 1.0
+ * @author Patrick Harms
+ */
+public class KeyboardMap {
+
+    /**
+     * <p>
+     * Locale used for the mapping.
+     * </p>
+     */
+    private Locale locale;
+
+    /**
+     * <p>
+     * Name of the mappings-file.
+     * </p>
+     */
+    private String fileName;
+
+    /**
+     * <p>
+     * Map that defines which key strokes define a virtual key.
+     * </p>
+     */
+    private Map<VirtualKey, List<KeyStroke>> keyStrokes =
+        new HashMap<VirtualKey, List<KeyStroke>>();
+
+    /**
+     * <p>
+     * Creates a new KeyboardMap.
+     * </p>
+     * 
+     * @param locale
+     *            Locale that is used for the keyboard map
+     */
+    KeyboardMap(Locale locale) {
+        this.locale = locale;
+
+        if ((this.locale == Locale.ENGLISH) || (this.locale == Locale.US) ||
+            (this.locale == Locale.CANADA))
+        {
+            fileName = "en-us";
+        }
+        else if (locale == Locale.UK) {
+            fileName = "en-gb";
+        }
+        else {
+            fileName = locale.getLanguage();
+        }
+    }
+
+    /**
+     * <p>
+     * Returns a character that is generated, given a {@link VirtualKey} is pressed while the
+     * respective modifiers are active.
+     * </p>
+     * 
+     * @param key
+     *            key that is pressed
+     * @param numlock
+     *            true, if numlock is pressed; false otherwise
+     * @param shift
+     *            true, if shift is pressed; false otherwise
+     * @param altgr
+     *            true, if altgr is pressed; false otherwise
+     * @param inhibit
+     *            true, if inhibit is pressed; false otherwise
+     * @return generated character
+     */
+    public char getCharacterFor(VirtualKey key,
+                                boolean numlock,
+                                boolean shift,
+                                boolean altgr,
+                                boolean inhibit)
+    {
+        List<KeyStroke> candidates = keyStrokes.get(key);
+
+        if (candidates == null) {
+            return Character.UNASSIGNED;
+        }
+
+        // try to find the key stroke
+        for (KeyStroke keyStroke : candidates) {
+            if ((numlock == keyStroke.getNumlock()) && (!keyStroke.getLocalstate()) &&
+                (shift == keyStroke.getShift()) && (altgr == keyStroke.getAltgr()) &&
+                (inhibit == keyStroke.getInhibit()))
+            {
+                return keyStroke.getCharacter();
+            }
+        }
+
+        // try to find the key stroke with a local state ignoring the other keys
+        for (KeyStroke keyStroke : candidates) {
+            if ((numlock == keyStroke.getNumlock()) && (keyStroke.getLocalstate()) &&
+                (inhibit == keyStroke.getInhibit()))
+            {
+                return keyStroke.getCharacter();
+            }
+        }
+
+        return Character.UNASSIGNED;
+    }
+
+    /**
+     * 
+     * <p>
+     * Initializes the keyboard map.
+     * </p>
+     * 
+     * @throws IllegalArgumentException thrown if there is a problem loading the keyboard map
+     */
+    void init() throws IllegalArgumentException {
+        Console.traceln(Level.FINE, "initializing keymap for locale " + locale);
+
+        List<String[]> deadKeySequences = new ArrayList<String[]>();
+        List<String[]> keyStrokes = new ArrayList<String[]>();
+        readStream(getStream(fileName), deadKeySequences, keyStrokes);
+
+        Console.traceln(Level.FINER, "read " + keyStrokes.size() + " key strokes and " +
+            deadKeySequences.size() + " dead key sequences");
+
+        VirtualKeySynonyms virtualKeySynonyms = determineVirtualKeySynonyms(keyStrokes);
+        processKeyStrokes(keyStrokes, virtualKeySynonyms);
+        // TODO still required? processDeadKeySequences(deadKeySequences);
+    }
+
+    /**
+     * <p>
+     * Returns a {@link InputStream} for a given filename.
+     * </p>
+     * 
+     * @param name
+     *            the filename
+     * @return the {@link InputStream}
+     */
+    private InputStream getStream(String name) {
+        Console.traceln(Level.FINER, "reading keymap for locale " + locale +
+            " from resource keymaps/" + name);
+
+        InputStream stream =
+            this.getClass().getClassLoader().getResourceAsStream("keymaps/" + name);
+
+        if (stream == null) {
+            throw new IllegalArgumentException("no keyboard map available for locale " + locale);
+        }
+
+        return stream;
+    }
+
+    /**
+     * <p>
+     * Reads a keyboard map from a input stream.
+     * </p>
+     * 
+     * @param stream
+     *            input stream with the keyboard map
+     * @param deadKeySequences
+     *            the dead key sequences
+     * @param keyStrokes
+     *            the keystrokes
+     * @throws IllegalArgumentException
+     *             thrown if there is an error reading the keyboard map
+     */
+    private void readStream(InputStream stream,
+                            List<String[]> deadKeySequences,
+                            List<String[]> keyStrokes) throws IllegalArgumentException
+    {
+        BufferedReader in = null;
+        try {
+            in = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
+        }
+        catch (UnsupportedEncodingException e) {
+            Console.traceln(Level.WARNING, "no keyboard map available for locale " + locale);
+            throw new IllegalArgumentException("provided stream can not be read due to invalid encoding",
+                                               e);
+        }
+
+        try {
+            String line;
+            while ((line = in.readLine()) != null) {
+                if (!"".equals(line)) {
+                    processLine(line, deadKeySequences, keyStrokes);
+                }
+            }
+        }
+        catch (IOException e) {
+            Console.traceln(Level.WARNING, "no keyboard map available for locale " + locale);
+            throw new IllegalArgumentException("no keyboard map available for locale " + locale, e);
+        }
+        finally {
+            try {
+                in.close();
+            }
+            catch (IOException e) {
+                Console.traceln(Level.WARNING,
+                                "could not close input stream for reading keyboard map");
+            }
+        }
+    }
+
+    /**
+     * <p>
+     * Processes a line of a keyboard map file.
+     * </p>
+     * 
+     * @param line
+     *            the line in the keyboard map file
+     * @param deadKeySequences
+     *            the dead key sequences
+     * @param keyStrokes
+     *            the keystrokes
+     */
+    private void processLine(String line, List<String[]> deadKeySequences, List<String[]> keyStrokes)
+    {
+        String[] values = line.split(" ");
+
+        if (values.length <= 0) {
+            return;
+        }
+
+        // ignore comments
+        if (values[0].startsWith("#")) {
+            return;
+        }
+
+        if ("map".equals(values[0])) {
+            // this is the map id. Ignore it.
+        }
+        else if ("include".equals(values[0])) {
+            // process all includes
+            for (int i = 1; i < values.length; i++) {
+                if (!values[i].startsWith("#")) {
+                    readStream(getStream(values[i]), deadKeySequences, keyStrokes);
+                }
+                else {
+                    break;
+                }
+            }
+        }
+        else if ("sequence".equals(values[0])) {
+            deadKeySequences.add(values);
+        }
+        else {
+            boolean alreadyAdded = false;
+
+            // check, if there is a replacement
+            for (int i = 0; i < keyStrokes.size(); i++) {
+                if (keyStrokes.get(i)[0].equals(values[0])) {
+                    Console.traceln(Level.FINEST, "replacing key stroke " + values[0] +
+                                    " with former keyid " + keyStrokes.get(i)[1] +
+                                    " with new key id " + values[1]);
+                    keyStrokes.set(i, values);
+                    alreadyAdded = true;
+                    break;
+                }
+            }
+
+            if (!alreadyAdded) {
+                keyStrokes.add(values);
+            }
+        }
+    }
+
+    /**
+     * <p>
+     * Determines synonyms for virtual keys for the keyboard map.
+     * </p>
+     * 
+     * @param keyStrokes
+     *            the keystrokes
+     * @return the synonyms
+     */
+    private VirtualKeySynonyms determineVirtualKeySynonyms(List<String[]> keyStrokes) {
+        Console.traceln(Level.FINER, "determining virtual keys and synonyms for the keymap");
+
+        VirtualKeySynonyms virtualKeySynonyms = new VirtualKeySynonyms();
+
+        // for debugging purposes, determine which key strokes are not matched to virtual keys.
+        List<String[]> unmatchedKeyStrokes = new ArrayList<String[]>();
+
+        for (String[] keyStroke : keyStrokes) {
+            String keyStrokeName = keyStroke[0];
+            int keyId = getKeyId(keyStroke[1]);
+            // System.err.println(keyStrokeName + "  0x" + Integer.toHexString(keyId));
+
+            VirtualKey virtualKey = determineVirtualKey(keyStrokeName);
+
+            if (virtualKey != null) {
+                virtualKeySynonyms.add(keyId, virtualKey);
+            }
+            else {
+                unmatchedKeyStrokes.add(keyStroke);
+            }
+        }
+
+        for (String[] unmatchedKeyStroke : unmatchedKeyStrokes) {
+            if (!virtualKeySynonyms.containsKey(getKeyId(unmatchedKeyStroke[1]))) {
+                Console.traceln(Level.FINEST, "no virtual key mapped to key stroke " +
+                                unmatchedKeyStroke[0] + "(" + unmatchedKeyStroke[1] +
+                                ") of keyboard map for locale " + locale);
+            }
+        }
+
+        return virtualKeySynonyms;
+    }
+
+    /**
+     * <p>
+     * Converts a hexadecimal Id that is contained in a string into the integer Id of the key.
+     * </p>
+     * 
+     * @param keyIdString
+     *            the Id string
+     * @return the Id as integer
+     */
+    private int getKeyId(String keyIdString) {
+        if (keyIdString.startsWith("0x")) {
+            keyIdString = keyIdString.substring(2);
+        }
+
+        return Integer.parseInt(keyIdString, 16);
+    }
+
+    /**
+     * <p>
+     * Processes a list of key strokes.
+     * </p>
+     * 
+     * @param keyStrokes
+     *            the key strokes
+     * @param virtualKeySynonyms
+     *            synonyms of the involved virtual keys
+     */
+    private void processKeyStrokes(List<String[]> keyStrokes, VirtualKeySynonyms virtualKeySynonyms)
+    {
+        for (String[] keyStroke : keyStrokes) {
+            handleKeyStroke(keyStroke, virtualKeySynonyms);
+        }
+
+        addKeyStrokesIndependentOfNumLock();
+    }
+
+    /**
+     * <p>
+     * Handles a key stroke.
+     * </p>
+     * 
+     * @param values
+     *            contains the name, string Id, and modifiers of the key stroke
+     * @param virtualKeySynonyms
+     *            synonyms of the involved virtual keys
+     */
+    private void handleKeyStroke(String[] values, VirtualKeySynonyms virtualKeySynonyms) {
+        String keyStrokeName = values[0];
+        String keyIdString = values[1];
+        if (keyIdString.startsWith("0x")) {
+            keyIdString = keyIdString.substring(2);
+        }
+
+        int keyId = Integer.parseInt(keyIdString, 16);
+
+        // parse the conditions
+        boolean numlock = false;
+        boolean localstate = false;
+        boolean shift = false;
+        boolean altgr = false;
+        boolean addupper = false;
+        boolean inhibit = false;
+
+        for (int i = 2; i < values.length; i++) {
+            if (!values[i].startsWith("#")) {
+                if ("numlock".equals(values[i])) {
+                    numlock = true;
+                }
+                else if ("localstate".equals(values[i])) {
+                    localstate = true;
+                }
+                else if ("shift".equals(values[i])) {
+                    shift = true;
+                }
+                else if ("altgr".equals(values[i])) {
+                    altgr = true;
+                }
+                else if ("addupper".equals(values[i])) {
+                    addupper = true;
+                }
+                else if ("inhibit".equals(values[i])) {
+                    inhibit = true;
+                }
+                else {
+                    Console.traceln(Level.SEVERE, "unknown condition " + values[i] +
+                                    " specified for key stroke " + keyStrokeName +
+                                    " through keyboard map for locale " + locale);
+                    throw new IllegalArgumentException
+                        ("no keyboard map available for locale " + locale);
+                }
+            }
+            else {
+                break;
+            }
+        }
+
+        addAllRepresentedKeyStrokes(keyStrokeName, keyId, numlock, localstate, shift, altgr,
+                                    addupper, inhibit, virtualKeySynonyms);
+    }
+
+    /**
+     * <p>
+     * Adds a key stroke and all synonyms to the keyboard map.
+     * </p>
+     * 
+     * @param keyStrokeName
+     *            name of the key stroke
+     * @param keyId
+     *            id of the key stroke
+     * @param numlock
+     *            true, if numlock is pressed; false otherwise
+     * @param localstate
+     *            true, if localstate is pressed; false otherwise
+     * @param shift
+     *            true, if shift is pressed; false otherwise
+     * @param altgr
+     *            true, if altgr is pressed; false otherwise
+     * @param addupper
+     *            true, if addupper is pressed; false otherwise
+     * @param inhibit
+     *            true, if inhibit is pressed; false otherwise
+     * @param virtualKeySynonyms
+     *            synonyms of the involved virtual keys
+     */
+    private void addAllRepresentedKeyStrokes(String keyStrokeName,
+                                             int keyId,
+                                             boolean numlock,
+                                             boolean localstate,
+                                             boolean shift,
+                                             boolean altgr,
+                                             boolean addupper,
+                                             boolean inhibit,
+                                             VirtualKeySynonyms virtualKeySynonyms)
+    {
+        VirtualKey[] virtualKeys = virtualKeySynonyms.getVirtualKeySynonyms(keyId);
+
+        if (virtualKeys == null) {
+            Console.traceln(Level.SEVERE, "no virtual key mapped to key stroke " + keyStrokeName +
+                " of keyboard map for locale " + locale);
+            return;
+        }
+
+        for (VirtualKey virtualKey : virtualKeys) {
+            if (addupper) {
+                char c = determineCharacter(keyStrokeName, true);
+                addKeyStroke(keyStrokeName, virtualKey, numlock, localstate, true, altgr, inhibit,
+                             c);
+
+                c = determineCharacter(keyStrokeName, false);
+                addKeyStroke(keyStrokeName, virtualKey, numlock, localstate, false, altgr, inhibit,
+                             c);
+            }
+            else {
+                char c = determineCharacter(keyStrokeName, false);
+                addKeyStroke(keyStrokeName, virtualKey, numlock, localstate, shift, altgr, inhibit,
+                             c);
+            }
+        }
+    }
+
+    /**
+     * <p>
+     * Adds a key stroke and to the keyboard map.
+     * </p>
+     * 
+     * @param keyStrokeName
+     *            name of the key stroke
+     * @param virtualKey
+     *            the associated virtual key
+     * @param numlock
+     *            true, if numlock is pressed; false otherwise
+     * @param localstate
+     *            true, if localstate is pressed; false otherwise
+     * @param shift
+     *            true, if shift is pressed; false otherwise
+     * @param altgr
+     *            true, if altgr is pressed; false otherwise
+     * @param addupper
+     *            true, if addupper is pressed; false otherwise
+     * @param inhibit
+     *            true, if inhibit is pressed; false otherwise
+     * @param character
+     *            the resulting character
+     */
+    private void addKeyStroke(String keyStrokeName,
+                              VirtualKey virtualKey,
+                              boolean numlock,
+                              boolean localstate,
+                              boolean shift,
+                              boolean altgr,
+                              boolean inhibit,
+                              char character)
+    {
+        KeyStroke keyStroke =
+            new KeyStroke(keyStrokeName, virtualKey, numlock, localstate, shift, altgr, inhibit,
+                          character);
+
+        List<KeyStroke> keyStrokeList = keyStrokes.get(keyStroke.getVirtualKey());
+
+        if (keyStrokeList == null) {
+            keyStrokeList = new ArrayList<KeyStroke>();
+            keyStrokes.put(keyStroke.getVirtualKey(), keyStrokeList);
+        }
+
+        keyStrokeList.add(keyStroke);
+    }
+
+    /**
+     * <p>
+     * Adds key strokes independent of numlock.
+     * </p>
+     */
+    private void addKeyStrokesIndependentOfNumLock() {
+        for (Map.Entry<VirtualKey, List<KeyStroke>> entry : keyStrokes.entrySet()) {
+            List<KeyStroke> keyStrokesToAdd = new ArrayList<KeyStroke>();
+            for (KeyStroke keyStroke : entry.getValue()) {
+                if (!keyStroke.getNumlock()) {
+                    boolean foundPositiveNumlockVariant = false;
+                    for (KeyStroke candidate : entry.getValue()) {
+                        if ((candidate.getShift() == keyStroke.getShift()) &&
+                            (candidate.getAltgr() == keyStroke.getAltgr()) &&
+                            (candidate.getLocalstate() == keyStroke.getLocalstate()) &&
+                            (candidate.getInhibit() == keyStroke.getInhibit()) &&
+                            (candidate.getNumlock()))
+                        {
+                            foundPositiveNumlockVariant = true;
+                            break;
+                        }
+                    }
+
+                    if (!foundPositiveNumlockVariant) {
+                        keyStrokesToAdd.add(keyStroke);
+                    }
+                }
+            }
+
+            for (KeyStroke keyStroke : keyStrokesToAdd) {
+                addKeyStroke(keyStroke.getKeyStrokeName(), keyStroke.getVirtualKey(), true,
+                             keyStroke.getLocalstate(), keyStroke.getShift(), keyStroke.getAltgr(),
+                             keyStroke.getInhibit(), keyStroke.getCharacter());
+            }
+        }
+    }
+
+    /**
+     * <p>
+     * Determines a {@link VirtualKey} depending on a key stroke name
+     * </p>
+     * 
+     * @param keyStrokeName
+     *            name of the key stroke
+     * @return related virtual key
+     */
+    private VirtualKey determineVirtualKey(String keyStrokeName) {
+        if ("Shift_R".equals(keyStrokeName)) {
+            return VirtualKey.SHIFT;
+        }
+        else if ("Shift_L".equals(keyStrokeName)) {
+            return VirtualKey.SHIFT;
+        }
+        else if ("Alt_R".equals(keyStrokeName)) {
+            return VirtualKey.ALT_GRAPH;
+        }
+        else if ("Mode_switch".equals(keyStrokeName)) {
+            return VirtualKey.MODECHANGE;
+        }
+        else if ("ISO_Level3_Shift".equals(keyStrokeName)) {
+            return VirtualKey.SHIFT;
+        }
+        else if ("Alt_L".equals(keyStrokeName)) {
+            return VirtualKey.ALT;
+        }
+        else if ("Control_R".equals(keyStrokeName)) {
+            return VirtualKey.CONTROL;
+        }
+        else if ("Control_L".equals(keyStrokeName)) {
+            return VirtualKey.CONTROL;
+        }
+        else if ("Menu".equals(keyStrokeName)) {
+            return VirtualKey.WINDOWS;
+        }
+        else if ("1".equals(keyStrokeName)) {
+            return VirtualKey.DIGIT_1;
+        }
+        else if ("2".equals(keyStrokeName)) {
+            return VirtualKey.DIGIT_2;
+        }
+        else if ("3".equals(keyStrokeName)) {
+            return VirtualKey.DIGIT_3;
+        }
+        else if ("4".equals(keyStrokeName)) {
+            return VirtualKey.DIGIT_4;
+        }
+        else if ("5".equals(keyStrokeName)) {
+            return VirtualKey.DIGIT_5;
+        }
+        else if ("6".equals(keyStrokeName)) {
+            return VirtualKey.DIGIT_6;
+        }
+        else if ("7".equals(keyStrokeName)) {
+            return VirtualKey.DIGIT_7;
+        }
+        else if ("8".equals(keyStrokeName)) {
+            return VirtualKey.DIGIT_8;
+        }
+        else if ("9".equals(keyStrokeName)) {
+            return VirtualKey.DIGIT_9;
+        }
+        else if ("0".equals(keyStrokeName)) {
+            return VirtualKey.DIGIT_0;
+        }
+        else if ("BackSpace".equals(keyStrokeName)) {
+            return VirtualKey.BACK_SPACE;
+        }
+        else if ("Tab".equals(keyStrokeName)) {
+            return VirtualKey.TAB;
+        }
+        else if ("q".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_Q;
+        }
+        else if ("w".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_W;
+        }
+        else if ("e".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_E;
+        }
+        else if ("r".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_R;
+        }
+        else if ("t".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_T;
+        }
+        else if ("y".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_Y;
+        }
+        else if ("u".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_U;
+        }
+        else if ("i".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_I;
+        }
+        else if ("o".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_O;
+        }
+        else if ("p".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_P;
+        }
+        else if ("a".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_A;
+        }
+        else if ("s".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_S;
+        }
+        else if ("d".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_D;
+        }
+        else if ("f".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_F;
+        }
+        else if ("g".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_G;
+        }
+        else if ("h".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_H;
+        }
+        else if ("j".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_J;
+        }
+        else if ("k".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_K;
+        }
+        else if ("l".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_L;
+        }
+        else if ("Return".equals(keyStrokeName)) {
+            return VirtualKey.ENTER;
+        }
+        else if ("z".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_Z;
+        }
+        else if ("x".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_X;
+        }
+        else if ("c".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_C;
+        }
+        else if ("v".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_V;
+        }
+        else if ("b".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_B;
+        }
+        else if ("n".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_N;
+        }
+        else if ("m".equals(keyStrokeName)) {
+            return VirtualKey.LETTER_M;
+        }
+        else if ("space".equals(keyStrokeName)) {
+            return VirtualKey.SPACE;
+        }
+        else if ("less".equals(keyStrokeName)) {
+            return VirtualKey.LESS;
+        }
+        else if ("greater".equals(keyStrokeName)) {
+            return VirtualKey.GREATER;
+        }
+        else if ("Escape".equals(keyStrokeName)) {
+            return VirtualKey.ESCAPE;
+        }
+        else if ("F1".equals(keyStrokeName)) {
+            return VirtualKey.F1;
+        }
+        else if ("F2".equals(keyStrokeName)) {
+            return VirtualKey.F2;
+        }
+        else if ("F3".equals(keyStrokeName)) {
+            return VirtualKey.F3;
+        }
+        else if ("F4".equals(keyStrokeName)) {
+            return VirtualKey.F4;
+        }
+        else if ("F5".equals(keyStrokeName)) {
+            return VirtualKey.F5;
+        }
+        else if ("F6".equals(keyStrokeName)) {
+            return VirtualKey.F6;
+        }
+        else if ("F7".equals(keyStrokeName)) {
+            return VirtualKey.F7;
+        }
+        else if ("F8".equals(keyStrokeName)) {
+            return VirtualKey.F8;
+        }
+        else if ("F9".equals(keyStrokeName)) {
+            return VirtualKey.F9;
+        }
+        else if ("F10".equals(keyStrokeName)) {
+            return VirtualKey.F10;
+        }
+        else if ("F11".equals(keyStrokeName)) {
+            return VirtualKey.F11;
+        }
+        else if ("F12".equals(keyStrokeName)) {
+            return VirtualKey.F12;
+        }
+        else if ("F13".equals(keyStrokeName)) {
+            return VirtualKey.F13;
+        }
+        else if ("F14".equals(keyStrokeName)) {
+            return VirtualKey.F14;
+        }
+        else if ("F15".equals(keyStrokeName)) {
+            return VirtualKey.F15;
+        }
+        else if ("F16".equals(keyStrokeName)) {
+            return VirtualKey.F16;
+        }
+        else if ("F17".equals(keyStrokeName)) {
+            return VirtualKey.F17;
+        }
+        else if ("F18".equals(keyStrokeName)) {
+            return VirtualKey.F18;
+        }
+        else if ("F19".equals(keyStrokeName)) {
+            return VirtualKey.F19;
+        }
+        else if ("F20".equals(keyStrokeName)) {
+            return VirtualKey.F20;
+        }
+        else if ("F21".equals(keyStrokeName)) {
+            return VirtualKey.F21;
+        }
+        else if ("F22".equals(keyStrokeName)) {
+            return VirtualKey.F22;
+        }
+        else if ("F23".equals(keyStrokeName)) {
+            return VirtualKey.F23;
+        }
+        else if ("F24".equals(keyStrokeName)) {
+            return VirtualKey.F24;
+        }
+        else if ("Print".equals(keyStrokeName)) {
+            return VirtualKey.PRINTSCREEN;
+        }
+        else if ("Scroll_Lock".equals(keyStrokeName)) {
+            return VirtualKey.SCROLL_LOCK;
+        }
+        else if ("Insert".equals(keyStrokeName)) {
+            return VirtualKey.INSERT;
+        }
+        else if ("Delete".equals(keyStrokeName)) {
+            return VirtualKey.DELETE;
+        }
+        else if ("Home".equals(keyStrokeName)) {
+            return VirtualKey.HOME;
+        }
+        else if ("End".equals(keyStrokeName)) {
+            return VirtualKey.END;
+        }
+        else if ("Page_Up".equals(keyStrokeName)) {
+            return VirtualKey.PAGE_UP;
+        }
+        else if ("Page_Down".equals(keyStrokeName)) {
+            return VirtualKey.PAGE_DOWN;
+        }
+        else if ("Left".equals(keyStrokeName)) {
+            return VirtualKey.LEFT;
+        }
+        else if ("Up".equals(keyStrokeName)) {
+            return VirtualKey.UP;
+        }
+        else if ("Down".equals(keyStrokeName)) {
+            return VirtualKey.DOWN;
+        }
+        else if ("Right".equals(keyStrokeName)) {
+            return VirtualKey.RIGHT;
+        }
+        else if ("Num_Lock".equals(keyStrokeName)) {
+            return VirtualKey.NUM_LOCK;
+        }
+        else if ("KP_Divide".equals(keyStrokeName)) {
+            return VirtualKey.SLASH;
+        }
+        else if ("KP_Multiply".equals(keyStrokeName)) {
+            return VirtualKey.ASTERISK;
+        }
+        else if ("KP_Subtract".equals(keyStrokeName)) {
+            return VirtualKey.MINUS;
+        }
+        else if ("KP_Add".equals(keyStrokeName)) {
+            return VirtualKey.PLUS;
+        }
+        else if ("KP_Enter".equals(keyStrokeName)) {
+            return VirtualKey.ENTER;
+        }
+        else if ("KP_Decimal".equals(keyStrokeName)) {
+            return VirtualKey.DECIMAL;
+        }
+        else if ("KP_Separator".equals(keyStrokeName)) {
+            return VirtualKey.SEPARATOR;
+        }
+        else if ("KP_Delete".equals(keyStrokeName)) {
+            return VirtualKey.DELETE;
+        }
+        else if ("KP_0".equals(keyStrokeName)) {
+            return VirtualKey.NUMPAD_0;
+        }
+        else if ("KP_Insert".equals(keyStrokeName)) {
+            return VirtualKey.INSERT;
+        }
+        else if ("KP_1".equals(keyStrokeName)) {
+            return VirtualKey.NUMPAD_1;
+        }
+        else if ("KP_End".equals(keyStrokeName)) {
+            return VirtualKey.END;
+        }
+        else if ("KP_2".equals(keyStrokeName)) {
+            return VirtualKey.NUMPAD_2;
+        }
+        else if ("KP_Down".equals(keyStrokeName)) {
+            return VirtualKey.KP_DOWN;
+        }
+        else if ("KP_3".equals(keyStrokeName)) {
+            return VirtualKey.NUMPAD_3;
+        }
+        else if ("KP_Next".equals(keyStrokeName)) {
+            return VirtualKey.PAGE_DOWN;
+        }
+        else if ("KP_4".equals(keyStrokeName)) {
+            return VirtualKey.NUMPAD_4;
+        }
+        else if ("KP_Left".equals(keyStrokeName)) {
+            return VirtualKey.KP_LEFT;
+        }
+        else if ("KP_5".equals(keyStrokeName)) {
+            return VirtualKey.NUMPAD_5;
+        }
+        else if ("KP_Begin".equals(keyStrokeName)) {
+            return VirtualKey.BEGIN;
+        }
+        else if ("KP_6".equals(keyStrokeName)) {
+            return VirtualKey.NUMPAD_6;
+        }
+        else if ("KP_Right".equals(keyStrokeName)) {
+            return VirtualKey.KP_RIGHT;
+        }
+        else if ("KP_7".equals(keyStrokeName)) {
+            return VirtualKey.NUMPAD_7;
+        }
+        else if ("KP_Home".equals(keyStrokeName)) {
+            return VirtualKey.HOME;
+        }
+        else if ("KP_8".equals(keyStrokeName)) {
+            return VirtualKey.NUMPAD_8;
+        }
+        else if ("KP_Up".equals(keyStrokeName)) {
+            return VirtualKey.KP_UP;
+        }
+        else if ("KP_9".equals(keyStrokeName)) {
+            return VirtualKey.NUMPAD_9;
+        }
+        else if ("KP_Prior".equals(keyStrokeName)) {
+            return VirtualKey.PAGE_UP;
+        }
+        else if ("Caps_Lock".equals(keyStrokeName)) {
+            return VirtualKey.CAPS_LOCK;
+        }
+        else if ("exclam".equals(keyStrokeName)) {
+            return VirtualKey.EXCLAMATION_MARK;
+        }
+        else if ("exclamdown".equals(keyStrokeName)) {
+            return VirtualKey.INVERTED_EXCLAMATION_MARK;
+        }
+        else if ("quotedbl".equals(keyStrokeName)) {
+            return VirtualKey.QUOTEDBL;
+        }
+        else if ("slash".equals(keyStrokeName)) {
+            return VirtualKey.SLASH;
+        }
+        else if ("backslash".equals(keyStrokeName)) {
+            return VirtualKey.BACK_SLASH;
+        }
+        else if ("dead_acute".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_ACUTE;
+        }
+        else if ("dead_diaresis".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_DIAERESIS;
+        }
+        else if ("dead_abovering".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_ABOVERING;
+        }
+        else if ("plus".equals(keyStrokeName)) {
+            return VirtualKey.PLUS;
+        }
+        else if ("asterisk".equals(keyStrokeName)) {
+            return VirtualKey.ASTERISK;
+        }
+        else if ("dead_tilde".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_TILDE;
+        }
+        else if ("dead_doubleacute".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_DOUBLEACUTE;
+        }
+        else if ("dead_caron".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_CARON;
+        }
+        else if ("dead_circumflex".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_CIRCUMFLEX;
+        }
+        else if ("comma".equals(keyStrokeName)) {
+            return VirtualKey.COMMA;
+        }
+        else if ("semicolon".equals(keyStrokeName)) {
+            return VirtualKey.SEMICOLON;
+        }
+        else if ("multiply".equals(keyStrokeName)) {
+            return VirtualKey.MULTIPLY;
+        }
+        else if ("period".equals(keyStrokeName)) {
+            return VirtualKey.PERIOD;
+        }
+        else if ("colon".equals(keyStrokeName)) {
+            return VirtualKey.COLON;
+        }
+        else if ("dead_breve".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_BREVE;
+        }
+        else if ("division".equals(keyStrokeName)) {
+            return VirtualKey.DIVIDE;
+        }
+        else if ("minus".equals(keyStrokeName)) {
+            return VirtualKey.MINUS;
+        }
+        else if ("underscore".equals(keyStrokeName)) {
+            return VirtualKey.UNDERSCORE;
+        }
+        else if ("dead_abovedot".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_ABOVEDOT;
+        }
+        else if ("bracketleft".equals(keyStrokeName)) {
+            return VirtualKey.OPEN_BRACKET;
+        }
+        else if ("bracketright".equals(keyStrokeName)) {
+            return VirtualKey.CLOSE_BRACKET;
+        }
+        else if ("grave".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_GRAVE;
+        }
+        else if ("equal".equals(keyStrokeName)) {
+            return VirtualKey.EQUALS;
+        }
+        else if ("dead_macron".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_MACRON;
+        }
+        else if ("dead_ogonek".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_OGONEK;
+        }
+        else if ("dead_cedilla".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_CEDILLA;
+        }
+        else if ("ampersand".equals(keyStrokeName)) {
+            return VirtualKey.AMPERSAND;
+        }
+        else if ("parenleft".equals(keyStrokeName)) {
+            return VirtualKey.LEFT_PARENTHESIS;
+        }
+        else if ("parenright".equals(keyStrokeName)) {
+            return VirtualKey.RIGHT_PARENTHESIS;
+        }
+        else if ("braceleft".equals(keyStrokeName)) {
+            return VirtualKey.BRACELEFT;
+        }
+        else if ("braceright".equals(keyStrokeName)) {
+            return VirtualKey.BRACERIGHT;
+        }
+        else if ("at".equals(keyStrokeName)) {
+            return VirtualKey.AT;
+        }
+        else if ("dollar".equals(keyStrokeName)) {
+            return VirtualKey.DOLLAR;
+        }
+        else if ("EuroSign".equals(keyStrokeName)) {
+            return VirtualKey.EURO_SIGN;
+        }
+        else if ("Begin".equals(keyStrokeName)) {
+            return VirtualKey.BEGIN;
+        }
+        else if ("numbersign".equals(keyStrokeName)) {
+            return VirtualKey.NUMBER_SIGN;
+        }
+        else if ("asciicircum".equals(keyStrokeName)) {
+            return VirtualKey.CIRCUMFLEX;
+        }
+        else if ("Kanji".equals(keyStrokeName)) {
+            return VirtualKey.KANJI;
+        }
+        else if ("Katakana".equals(keyStrokeName)) {
+            return VirtualKey.KATAKANA;
+        }
+        else if ("Hiragana_Katakana".equals(keyStrokeName)) {
+            return VirtualKey.HIRAGANA;
+        }
+        else if ("Muhenkan".equals(keyStrokeName)) {
+            // I found this in the KeyEvent description
+            return VirtualKey.NONCONVERT;
+        }
+        else if ("kan".equals(keyStrokeName)) {
+            // I found this in the KeyEvent description
+            return VirtualKey.NONCONVERT;
+        }
+        else if ("Henkan_Mode".equals(keyStrokeName)) {
+            // I found this in the key event description
+            return VirtualKey.CONVERT;
+        }
+        else if ("voicedsound".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_VOICED_SOUND;
+        }
+        else if ("semivoicedsound".equals(keyStrokeName)) {
+            return VirtualKey.DEAD_SEMIVOICED_SOUND;
+        }
+        else if ("Menu".equals(keyStrokeName)) {
+            return VirtualKey.CONTEXT_MENU;
+        }
+        else {
+            Console.traceln(Level.FINEST, "unknown virtual key for key stroke " + keyStrokeName +
+                " specified through " + "keyboard map for locale " + locale);
+
+            return null;
+        }
+
+        // for the following virtual keys no key stroke names are provided in the key maps
+        /*
+         * CANCEL(KeyEvent.VK_CANCEL), CLEAR(KeyEvent.VK_CLEAR), PAUSE(KeyEvent.VK_PAUSE),
+         * HELP(KeyEvent.VK_HELP), META(KeyEvent.VK_META),
+         * 
+         * BACK_QUOTE(KeyEvent.VK_BACK_QUOTE), QUOTE(KeyEvent.VK_QUOTE),
+         * 
+         * DEAD_IOTA(KeyEvent.VK_DEAD_IOTA),
+         * 
+         * FINAL(KeyEvent.VK_FINAL), CONVERT(KeyEvent.VK_CONVERT),
+         * NONCONVERT(KeyEvent.VK_NONCONVERT), ACCEPT(KeyEvent.VK_ACCEPT), KANA(KeyEvent.VK_KANA),
+         * ALPHANUMERIC(KeyEvent.VK_ALPHANUMERIC), FULL_WIDTH(KeyEvent.VK_FULL_WIDTH),
+         * HALF_WIDTH(KeyEvent.VK_HALF_WIDTH), ROMAN_CHARACTERS(KeyEvent.VK_ROMAN_CHARACTERS),
+         * ALL_CANDIDATES(KeyEvent.VK_ALL_CANDIDATES),
+         * PREVIOUS_CANDIDATE(KeyEvent.VK_PREVIOUS_CANDIDATE), CODE_INPUT(KeyEvent.VK_CODE_INPUT),
+         * JAPANESE_KATAKANA(KeyEvent.VK_JAPANESE_KATAKANA),
+         * JAPANESE_HIRAGANA(KeyEvent.VK_JAPANESE_HIRAGANA),
+         * JAPANESE_ROMAN(KeyEvent.VK_JAPANESE_ROMAN), KANA_LOCK(KeyEvent.VK_KANA_LOCK),
+         * INPUT_METHOD_ON_OFF(KeyEvent.VK_INPUT_METHOD_ON_OFF),
+         * 
+         * CUT(KeyEvent.VK_CUT), COPY(KeyEvent.VK_COPY), PASTE(KeyEvent.VK_PASTE),
+         * UNDO(KeyEvent.VK_UNDO), AGAIN(KeyEvent.VK_AGAIN), FIND(KeyEvent.VK_FIND),
+         * PROPS(KeyEvent.VK_PROPS), STOP(KeyEvent.VK_STOP), COMPOSE(KeyEvent.VK_COMPOSE),
+         */
+    }
+
+    /**
+     * <p>
+     * Determines the character that is generated by a key stroke.
+     * </p>
+     *
+     * @param keyStrokeName name of the key stroke
+     * @param getUpper defines whether the upper case version of the key stroke is returned or not
+     * @return the character
+     */
+    private char determineCharacter(String keyStrokeName, boolean getUpper) {
+        if ("Shift_R".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Shift_L".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Alt_R".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Mode_switch".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("ISO_Level3_Shift".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Alt_L".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Control_R".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Control_L".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Menu".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("1".equals(keyStrokeName)) {
+            return '1';
+        }
+        else if ("2".equals(keyStrokeName)) {
+            return '2';
+        }
+        else if ("3".equals(keyStrokeName)) {
+            return '3';
+        }
+        else if ("4".equals(keyStrokeName)) {
+            return '4';
+        }
+        else if ("5".equals(keyStrokeName)) {
+            return '5';
+        }
+        else if ("6".equals(keyStrokeName)) {
+            return '6';
+        }
+        else if ("7".equals(keyStrokeName)) {
+            return '7';
+        }
+        else if ("8".equals(keyStrokeName)) {
+            return '8';
+        }
+        else if ("9".equals(keyStrokeName)) {
+            return '9';
+        }
+        else if ("0".equals(keyStrokeName)) {
+            return '0';
+        }
+        else if ("BackSpace".equals(keyStrokeName)) {
+            return '\b';
+        }
+        else if ("Tab".equals(keyStrokeName)) {
+            return '\t';
+        }
+        else if ("ISO_Left_Tab".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("q".equals(keyStrokeName)) {
+            return getUpper ? 'Q' : 'q';
+        }
+        else if ("w".equals(keyStrokeName)) {
+            return getUpper ? 'W' : 'w';
+        }
+        else if ("e".equals(keyStrokeName)) {
+            return getUpper ? 'E' : 'e';
+        }
+        else if ("r".equals(keyStrokeName)) {
+            return getUpper ? 'R' : 'r';
+        }
+        else if ("t".equals(keyStrokeName)) {
+            return getUpper ? 'T' : 't';
+        }
+        else if ("y".equals(keyStrokeName)) {
+            return getUpper ? 'Y' : 'y';
+        }
+        else if ("u".equals(keyStrokeName)) {
+            return getUpper ? 'U' : 'u';
+        }
+        else if ("i".equals(keyStrokeName)) {
+            return getUpper ? 'I' : 'i';
+        }
+        else if ("o".equals(keyStrokeName)) {
+            return getUpper ? 'O' : 'o';
+        }
+        else if ("p".equals(keyStrokeName)) {
+            return getUpper ? 'P' : 'p';
+        }
+        else if ("a".equals(keyStrokeName)) {
+            return getUpper ? 'A' : 'a';
+        }
+        else if ("s".equals(keyStrokeName)) {
+            return getUpper ? 'S' : 's';
+        }
+        else if ("d".equals(keyStrokeName)) {
+            return getUpper ? 'D' : 'd';
+        }
+        else if ("f".equals(keyStrokeName)) {
+            return getUpper ? 'F' : 'f';
+        }
+        else if ("g".equals(keyStrokeName)) {
+            return getUpper ? 'G' : 'g';
+        }
+        else if ("h".equals(keyStrokeName)) {
+            return getUpper ? 'H' : 'h';
+        }
+        else if ("j".equals(keyStrokeName)) {
+            return getUpper ? 'J' : 'j';
+        }
+        else if ("k".equals(keyStrokeName)) {
+            return getUpper ? 'K' : 'k';
+        }
+        else if ("l".equals(keyStrokeName)) {
+            return getUpper ? 'L' : 'l';
+        }
+        else if ("Return".equals(keyStrokeName)) {
+            return '\n';
+        }
+        else if ("z".equals(keyStrokeName)) {
+            return getUpper ? 'Z' : 'z';
+        }
+        else if ("x".equals(keyStrokeName)) {
+            return getUpper ? 'X' : 'x';
+        }
+        else if ("c".equals(keyStrokeName)) {
+            return getUpper ? 'C' : 'c';
+        }
+        else if ("v".equals(keyStrokeName)) {
+            return getUpper ? 'V' : 'v';
+        }
+        else if ("b".equals(keyStrokeName)) {
+            return getUpper ? 'B' : 'b';
+        }
+        else if ("n".equals(keyStrokeName)) {
+            return getUpper ? 'N' : 'n';
+        }
+        else if ("m".equals(keyStrokeName)) {
+            return getUpper ? 'M' : 'm';
+        }
+        else if ("space".equals(keyStrokeName)) {
+            return ' ';
+        }
+        else if ("less".equals(keyStrokeName)) {
+            return '<';
+        }
+        else if ("greater".equals(keyStrokeName)) {
+            return '>';
+        }
+        else if ("bar".equals(keyStrokeName)) {
+            return '|';
+        }
+        else if ("brokenbar".equals(keyStrokeName)) {
+            return '¦';
+        }
+        else if ("Escape".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F1".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F2".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F3".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F4".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F5".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F6".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F7".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F8".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F9".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F10".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F11".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("SunF36".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F12".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("SunF37".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Print".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Sys_Req".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Execute".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F22".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Scroll_Lock".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F23".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Insert".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Delete".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Home".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("End".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Page_Up".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Page_Down".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Left".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Up".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Down".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Right".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Num_Lock".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("KP_Divide".equals(keyStrokeName)) {
+            return '/';
+        }
+        else if ("KP_Multiply".equals(keyStrokeName)) {
+            return '*';
+        }
+        else if ("KP_Subtract".equals(keyStrokeName)) {
+            return '-';
+        }
+        else if ("KP_Add".equals(keyStrokeName)) {
+            return '+';
+        }
+        else if ("KP_Enter".equals(keyStrokeName)) {
+            return '\n';
+        }
+        else if ("KP_Decimal".equals(keyStrokeName)) {
+            return ',';
+        }
+        else if ("KP_Separator".equals(keyStrokeName)) {
+            return ',';
+        }
+        else if ("KP_Delete".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("KP_0".equals(keyStrokeName)) {
+            return '0';
+        }
+        else if ("KP_Insert".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("KP_1".equals(keyStrokeName)) {
+            return '1';
+        }
+        else if ("KP_End".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("KP_2".equals(keyStrokeName)) {
+            return '2';
+        }
+        else if ("KP_Down".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("KP_3".equals(keyStrokeName)) {
+            return '3';
+        }
+        else if ("KP_Next".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("KP_4".equals(keyStrokeName)) {
+            return '4';
+        }
+        else if ("KP_Left".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("KP_5".equals(keyStrokeName)) {
+            return '5';
+        }
+        else if ("KP_Begin".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("KP_6".equals(keyStrokeName)) {
+            return '6';
+        }
+        else if ("KP_Right".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("KP_7".equals(keyStrokeName)) {
+            return '7';
+        }
+        else if ("KP_Home".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("KP_8".equals(keyStrokeName)) {
+            return '8';
+        }
+        else if ("KP_Up".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("KP_9".equals(keyStrokeName)) {
+            return '9';
+        }
+        else if ("KP_Prior".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Caps_Lock".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Multi_key".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("exclam".equals(keyStrokeName)) {
+            return '!';
+        }
+        else if ("onesuperior".equals(keyStrokeName)) {
+            return '¹';
+        }
+        else if ("exclamdown".equals(keyStrokeName)) {
+            return '¡';
+        }
+        else if ("quotedbl".equals(keyStrokeName)) {
+            return '"';
+        }
+        else if ("twosuperior".equals(keyStrokeName)) {
+            return '²';
+        }
+        else if ("oneeighth".equals(keyStrokeName)) {
+            return '⅛';
+        }
+        else if ("section".equals(keyStrokeName)) {
+            return '§';
+        }
+        else if ("threesuperior".equals(keyStrokeName)) {
+            return '³';
+        }
+        else if ("sterling".equals(keyStrokeName)) {
+            return '£';
+        }
+        else if ("dollar".equals(keyStrokeName)) {
+            return '$';
+        }
+        else if ("onequarter".equals(keyStrokeName)) {
+            return '¼';
+        }
+        else if ("currency".equals(keyStrokeName)) {
+            return '¤';
+        }
+        else if ("percent".equals(keyStrokeName)) {
+            return '%';
+        }
+        else if ("onehalf".equals(keyStrokeName)) {
+            return '½';
+        }
+        else if ("threeeighths".equals(keyStrokeName)) {
+            return '⅜';
+        }
+        else if ("ampersand".equals(keyStrokeName)) {
+            return '&';
+        }
+        else if ("threequarters".equals(keyStrokeName)) {
+            return '¾';
+        }
+        else if ("fiveeighths".equals(keyStrokeName)) {
+            return '⅝';
+        }
+        else if ("slash".equals(keyStrokeName)) {
+            return '/';
+        }
+        else if ("braceleft".equals(keyStrokeName)) {
+            return '{';
+        }
+        else if ("seveneighths".equals(keyStrokeName)) {
+            return '⅞';
+        }
+        else if ("parenleft".equals(keyStrokeName)) {
+            return '(';
+        }
+        else if ("bracketleft".equals(keyStrokeName)) {
+            return '[';
+        }
+        else if ("trademark".equals(keyStrokeName)) {
+            return '™';
+        }
+        else if ("parenright".equals(keyStrokeName)) {
+            return ')';
+        }
+        else if ("bracketright".equals(keyStrokeName)) {
+            return ']';
+        }
+        else if ("plusminus".equals(keyStrokeName)) {
+            return '±';
+        }
+        else if ("equal".equals(keyStrokeName)) {
+            return '=';
+        }
+        else if ("braceright".equals(keyStrokeName)) {
+            return '}';
+        }
+        else if ("ssharp".equals(keyStrokeName)) {
+            return 'ß';
+        }
+        else if ("question".equals(keyStrokeName)) {
+            return '?';
+        }
+        else if ("backslash".equals(keyStrokeName)) {
+            return '\\';
+        }
+        else if ("questiondown".equals(keyStrokeName)) {
+            return '¿';
+        }
+        else if ("acute".equals(keyStrokeName)) {
+            return '´';
+        }
+        else if ("dead_acute".equals(keyStrokeName)) {
+            return 0x0301;
+        }
+        else if ("grave".equals(keyStrokeName)) {
+            return '`';
+        }
+        else if ("dead_grave".equals(keyStrokeName)) {
+            return 0x0300;
+        }
+        else if ("dead_cedilla".equals(keyStrokeName)) {
+            return 0x0327;
+        }
+        else if ("dead_ogonek".equals(keyStrokeName)) {
+            return 0x0328;
+        }
+        else if ("at".equals(keyStrokeName)) {
+            return '@';
+        }
+        else if ("Greek_OMEGA".equals(keyStrokeName)) {
+            return 'Ω';
+        }
+        else if ("EuroSign".equals(keyStrokeName)) {
+            return '€';
+        }
+        else if ("paragraph".equals(keyStrokeName)) {
+            return 0x2029;
+        }
+        else if ("registered".equals(keyStrokeName)) {
+            return '®';
+        }
+        else if ("tslash".equals(keyStrokeName)) {
+            return 'ŧ';
+        }
+        else if ("Tslash".equals(keyStrokeName)) {
+            return 'Ŧ';
+        }
+        else if ("z".equals(keyStrokeName)) {
+            return getUpper ? 'Z' : 'z';
+        }
+        else if ("leftarrow".equals(keyStrokeName)) {
+            return '←';
+        }
+        else if ("yen".equals(keyStrokeName)) {
+            return '¥';
+        }
+        else if ("downarrow".equals(keyStrokeName)) {
+            return '↓';
+        }
+        else if ("uparrow".equals(keyStrokeName)) {
+            return '↑';
+        }
+        else if ("rightarrow".equals(keyStrokeName)) {
+            return '→';
+        }
+        else if ("idotless".equals(keyStrokeName)) {
+            return 'ı';
+        }
+        else if ("oslash".equals(keyStrokeName)) {
+            return 'ø';
+        }
+        else if ("Ooblique".equals(keyStrokeName)) {
+            return 'Ø';
+        }
+        else if ("thorn".equals(keyStrokeName)) {
+            return 'þ';
+        }
+        else if ("THORN".equals(keyStrokeName)) {
+            return 'Þ';
+        }
+        else if ("udiaeresis".equals(keyStrokeName)) {
+            return getUpper ? 'Ü' : 'ü';
+        }
+        else if ("Udiaeresis".equals(keyStrokeName)) {
+            return getUpper ? 'Ü' : 'ü';
+        }
+        else if ("dead_diaeresis".equals(keyStrokeName)) {
+            return 0x0308;
+        }
+        else if ("dead_abovering".equals(keyStrokeName)) {
+            return 0x030A;
+        }
+        else if ("plus".equals(keyStrokeName)) {
+            return '+';
+        }
+        else if ("asterisk".equals(keyStrokeName)) {
+            return '*';
+        }
+        else if ("asciitilde".equals(keyStrokeName)) {
+            return '~';
+        }
+        else if ("dead_tilde".equals(keyStrokeName)) {
+            return 0x0303;
+        }
+        else if ("dead_macron".equals(keyStrokeName)) {
+            return 0x0304;
+        }
+        else if ("ae".equals(keyStrokeName)) {
+            return 'æ';
+        }
+        else if ("AE".equals(keyStrokeName)) {
+            return 'Æ';
+        }
+        else if ("eth".equals(keyStrokeName)) {
+            return 'ð';
+        }
+        else if ("ETH".equals(keyStrokeName)) {
+            return 'Ð';
+        }
+        else if ("dstroke".equals(keyStrokeName)) {
+            return getUpper ? 'Đ' : 'đ';
+        }
+        else if ("ordfeminine".equals(keyStrokeName)) {
+            return 'ª';
+        }
+        else if ("eng".equals(keyStrokeName)) {
+            return 'ŋ';
+        }
+        else if ("ENG".equals(keyStrokeName)) {
+            return 'Ŋ';
+        }
+        else if ("hstroke".equals(keyStrokeName)) {
+            return 'ħ';
+        }
+        else if ("Hstroke".equals(keyStrokeName)) {
+            return 'Ħ';
+        }
+        else if ("kra".equals(keyStrokeName)) {
+            return 'ĸ';
+        }
+        else if ("odiaeresis".equals(keyStrokeName)) {
+            return 'ö';
+        }
+        else if ("Odiaeresis".equals(keyStrokeName)) {
+            return 'Ö';
+        }
+        else if ("dead_doubleacute".equals(keyStrokeName)) {
+            return 0x030B;
+        }
+        else if ("adiaeresis".equals(keyStrokeName)) {
+            return 'ä';
+        }
+        else if ("Adiaeresis".equals(keyStrokeName)) {
+            return 'Ä';
+        }
+        else if ("dead_caron".equals(keyStrokeName)) {
+            return 0x030C;
+        }
+        else if ("asciicircum".equals(keyStrokeName)) {
+            return '^';
+        }
+        else if ("dead_circumflex".equals(keyStrokeName)) {
+            return 0x0302;
+        }
+        else if ("degree".equals(keyStrokeName)) {
+            return '°';
+        }
+        else if ("notsign".equals(keyStrokeName)) {
+            return '¬';
+        }
+        else if ("numbersign".equals(keyStrokeName)) {
+            return '#';
+        }
+        else if ("apostrophe".equals(keyStrokeName)) {
+            return '\'';
+        }
+        else if ("dead_breve".equals(keyStrokeName)) {
+            return 0x0306;
+        }
+        else if ("y".equals(keyStrokeName)) {
+            return getUpper ? 'Y' : 'y';
+        }
+        else if ("guillemotleft".equals(keyStrokeName)) {
+            return '»';
+        }
+        else if ("guillemotright".equals(keyStrokeName)) {
+            return '«';
+        }
+        else if ("cent".equals(keyStrokeName)) {
+            return '¢';
+        }
+        else if ("copyright".equals(keyStrokeName)) {
+            return '©';
+        }
+        else if ("leftdoublequotemark".equals(keyStrokeName)) {
+            return '„';
+        }
+        else if ("rightdoublequotemark".equals(keyStrokeName)) {
+            return '“';
+        }
+        else if ("mu".equals(keyStrokeName)) {
+            return 'µ';
+        }
+        else if ("masculine".equals(keyStrokeName)) {
+            return 'º';
+        }
+        else if ("comma".equals(keyStrokeName)) {
+            return ',';
+        }
+        else if ("semicolon".equals(keyStrokeName)) {
+            return ';';
+        }
+        else if ("horizconnector".equals(keyStrokeName)) {
+            return '·';
+        }
+        else if ("multiply".equals(keyStrokeName)) {
+            return '×';
+        }
+        else if ("period".equals(keyStrokeName)) {
+            return '.';
+        }
+        else if ("colon".equals(keyStrokeName)) {
+            return ':';
+        }
+        else if ("periodcentered".equals(keyStrokeName)) {
+            return '…';
+        }
+        else if ("division".equals(keyStrokeName)) {
+            return '÷';
+        }
+        else if ("minus".equals(keyStrokeName)) {
+            return '-';
+        }
+        else if ("underscore".equals(keyStrokeName)) {
+            return '_';
+        }
+        else if ("dead_belowdot".equals(keyStrokeName)) {
+            return 0x0323;
+        }
+        else if ("dead_abovedot".equals(keyStrokeName)) {
+            return 0x0307;
+        }
+        else if ("eacute".equals(keyStrokeName)) {
+            return getUpper ? 'É' : 'é';
+        }
+        else if ("Eacute".equals(keyStrokeName)) {
+            return getUpper ? 'É' : 'é';
+        }
+        else if ("egrave".equals(keyStrokeName)) {
+            return getUpper ? 'È' : 'è';
+        }
+        else if ("Egrave".equals(keyStrokeName)) {
+            return getUpper ? 'È' : 'è';
+        }
+        else if ("ccedilla".equals(keyStrokeName)) {
+            return getUpper ? 'Ç' : 'ç';
+        }
+        else if ("Ccedilla".equals(keyStrokeName)) {
+            return getUpper ? 'Ç' : 'ç';
+        }
+        else if ("agrave".equals(keyStrokeName)) {
+            return getUpper ? 'À' : 'à';
+        }
+        else if ("Agrave".equals(keyStrokeName)) {
+            return getUpper ? 'À' : 'à';
+        }
+        else if ("lstroke".equals(keyStrokeName)) {
+            return getUpper ? 'Ł' : 'ł';
+        }
+        else if ("Lstroke".equals(keyStrokeName)) {
+            return getUpper ? 'Ł' : 'ł';
+        }
+        else if ("ugrave".equals(keyStrokeName)) {
+            return getUpper ? 'Ù' : 'ù';
+        }
+        else if ("Ugrave".equals(keyStrokeName)) {
+            return getUpper ? 'Ù' : 'ù';
+        }
+        else if ("igrave".equals(keyStrokeName)) {
+            return getUpper ? 'Ì' : 'ì';
+        }
+        else if ("Igrave".equals(keyStrokeName)) {
+            return getUpper ? 'Ì' : 'ì';
+        }
+        else if ("ograve".equals(keyStrokeName)) {
+            return getUpper ? 'Ò' : 'ò';
+        }
+        else if ("ograve".equals(keyStrokeName)) {
+            return getUpper ? 'Ò' : 'ò';
+        }
+        else if ("keyboard_type".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("keyboard_subtype".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("keyboard_functionkeys".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("kana_NU".equals(keyStrokeName)) {
+            return 'ヌ';
+        }
+        else if ("kana_FU".equals(keyStrokeName)) {
+            return 'フ';
+        }
+        else if ("kana_A".equals(keyStrokeName)) {
+            return 'ア';
+        }
+        else if ("kana_a".equals(keyStrokeName)) {
+            return 'ァ';
+        }
+        else if ("kana_U".equals(keyStrokeName)) {
+            return 'ウ';
+        }
+        else if ("kana_u".equals(keyStrokeName)) {
+            return 'ゥ';
+        }
+        else if ("kana_E".equals(keyStrokeName)) {
+            return 'エ';
+        }
+        else if ("kana_e".equals(keyStrokeName)) {
+            return 'ェ';
+        }
+        else if ("kana_O".equals(keyStrokeName)) {
+            return 'オ';
+        }
+        else if ("kana_o".equals(keyStrokeName)) {
+            return 'ォ';
+        }
+        else if ("kana_YA".equals(keyStrokeName)) {
+            return 'ヤ';
+        }
+        else if ("kana_ya".equals(keyStrokeName)) {
+            return 'ャ';
+        }
+        else if ("kana_YU".equals(keyStrokeName)) {
+            return 'ユ';
+        }
+        else if ("kana_yu".equals(keyStrokeName)) {
+            return 'ュ';
+        }
+        else if ("kana_YO".equals(keyStrokeName)) {
+            return 'ヨ';
+        }
+        else if ("kana_yo".equals(keyStrokeName)) {
+            return 'ョ';
+        }
+        else if ("kana_WA".equals(keyStrokeName)) {
+            return 'ワ';
+        }
+        else if ("kana_WO".equals(keyStrokeName)) {
+            return 'ヲ';
+        }
+        else if ("kana_HO".equals(keyStrokeName)) {
+            return 'ホ';
+        }
+        else if ("kana_HE".equals(keyStrokeName)) {
+            return 'ヘ';
+        }
+        else if ("kana_TA".equals(keyStrokeName)) {
+            return 'タ';
+        }
+        else if ("kana_TE".equals(keyStrokeName)) {
+            return 'テ';
+        }
+        else if ("kana_I".equals(keyStrokeName)) {
+            return 'イ';
+        }
+        else if ("kana_i".equals(keyStrokeName)) {
+            return 'ィ';
+        }
+        else if ("kana_SU".equals(keyStrokeName)) {
+            return 'ス';
+        }
+        else if ("kana_KA".equals(keyStrokeName)) {
+            return 'カ';
+        }
+        else if ("kana_N".equals(keyStrokeName)) {
+            return 'ン';
+        }
+        else if ("kana_NA".equals(keyStrokeName)) {
+            return 'ナ';
+        }
+        else if ("kana_NI".equals(keyStrokeName)) {
+            return 'ニ';
+        }
+        else if ("kana_RA".equals(keyStrokeName)) {
+            return 'ラ';
+        }
+        else if ("kana_SE".equals(keyStrokeName)) {
+            return 'セ';
+        }
+        else if ("voicedsound".equals(keyStrokeName)) {
+            return 0x3099;
+        }
+        else if ("semivoicedsound".equals(keyStrokeName)) {
+            return 0x309A;
+        }
+        else if ("kana_openingbracket".equals(keyStrokeName)) {
+            return 0x04A2;
+        }
+        else if ("kana_closingbracket".equals(keyStrokeName)) {
+            return 0x04A3;
+        }
+        else if ("kana_CHI".equals(keyStrokeName)) {
+            return 'チ';
+        }
+        else if ("kana_TO".equals(keyStrokeName)) {
+            return 'ト';
+        }
+        else if ("kana_SHI".equals(keyStrokeName)) {
+            return 'シ';
+        }
+        else if ("kana_HA".equals(keyStrokeName)) {
+            return 'ハ';
+        }
+        else if ("kana_KI".equals(keyStrokeName)) {
+            return 'キ';
+        }
+        else if ("kana_KU".equals(keyStrokeName)) {
+            return 'ク';
+        }
+        else if ("kana_MA".equals(keyStrokeName)) {
+            return 'マ';
+        }
+        else if ("kana_NO".equals(keyStrokeName)) {
+            return 'ノ';
+        }
+        else if ("kana_RI".equals(keyStrokeName)) {
+            return 'リ';
+        }
+        else if ("kana_RE".equals(keyStrokeName)) {
+            return 'レ';
+        }
+        else if ("kana_KE".equals(keyStrokeName)) {
+            return 'ケ';
+        }
+        else if ("Zenkaku_Hankaku".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Kanji".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("kana_MU".equals(keyStrokeName)) {
+            return 'ム';
+        }
+        else if ("kana_TSU".equals(keyStrokeName)) {
+            return 'ツ';
+        }
+        else if ("kana_tsu".equals(keyStrokeName)) {
+            return 'ッ';
+        }
+        else if ("kana_SA".equals(keyStrokeName)) {
+            return 'サ';
+        }
+        else if ("kana_SO".equals(keyStrokeName)) {
+            return 'ソ';
+        }
+        else if ("kana_HI".equals(keyStrokeName)) {
+            return 'ヒ';
+        }
+        else if ("kana_KO".equals(keyStrokeName)) {
+            return 'コ';
+        }
+        else if ("kana_MI".equals(keyStrokeName)) {
+            return 'ミ';
+        }
+        else if ("kana_MO".equals(keyStrokeName)) {
+            return 'モ';
+        }
+        else if ("kana_NE".equals(keyStrokeName)) {
+            return 'ネ';
+        }
+        else if ("kana_comma".equals(keyStrokeName)) {
+            return '､';
+        }
+        else if ("kana_RU".equals(keyStrokeName)) {
+            return 'ル';
+        }
+        else if ("kana_fullstop".equals(keyStrokeName)) {
+            return '｡';
+        }
+        else if ("kana_ME".equals(keyStrokeName)) {
+            return 'メ';
+        }
+        else if ("kana_conjunctive".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Henkan_Mode".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Hiragana_Katakana".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Katakana".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Romaji".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Muhenkan".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Eisu_toggle".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Eisu_toggle".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("F13".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Hangul".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else if ("Hangul_Hanja".equals(keyStrokeName)) {
+            return Character.UNASSIGNED;
+        }
+        else {
+            Console.traceln(Level.SEVERE, "unknown key stroke name " + keyStrokeName +
+                            " specified through keyboard map " + "for locale " + locale);
+
+            // if (shift)
+            // {
+            // System.err.println("    else if (\"" + keyStrokeName + "\".equals(keyStrokeName))");
+            // System.err.println("    {");
+            // System.err.println("      return shift ? '" +
+            // Character.toUpperCase(keyStrokeName.charAt(0)) +
+            // "' : '" + Character.toLowerCase(keyStrokeName.charAt(0)) + "';");
+            // System.err.println("    }");
+            // }
+            // else
+            // {
+            // System.err.println("    else if (\"" + keyStrokeName + "\".equals(keyStrokeName))");
+            // System.err.println("    {");
+            // System.err.println("      return '" + keyStrokeName + "';");
+            // System.err.println("    }");
+            // }
+            //
+            // return 0x0;
+            throw new IllegalArgumentException("no keyboard map available for locale " + locale);
+        }
+    }
+}
Index: /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/KeyboardMapFactory.java
===================================================================
--- /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/KeyboardMapFactory.java	(revision 901)
+++ /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/KeyboardMapFactory.java	(revision 901)
@@ -0,0 +1,36 @@
+package de.ugoe.cs.tasktree.keyboardmaps;
+
+import java.util.Locale;
+
+/**
+ * <p>
+ * Creates keyboard maps.
+ * </p>
+ * 
+ * @version 1.0
+ * @author Patrick Harms
+ */
+public class KeyboardMapFactory {
+
+    /**
+     * <p>
+     * Constructor. Private to prevent initialization of this class.
+     * </p>
+     */
+    private KeyboardMapFactory() {
+    }
+
+    /**
+     * <p>
+     * Returns a {@link KeyboardMap} for the given {@link Locale}.
+     * </p>
+     *
+     * @param locale the locale
+     * @return the keyboard map
+     */
+    public static KeyboardMap createKeyboardMap(Locale locale) {
+        KeyboardMap keyboardMap = new KeyboardMap(locale);
+        keyboardMap.init();
+        return keyboardMap;
+    }
+}
Index: /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/VirtualKey.java
===================================================================
--- /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/VirtualKey.java	(revision 901)
+++ /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/VirtualKey.java	(revision 901)
@@ -0,0 +1,483 @@
+package de.ugoe.cs.tasktree.keyboardmaps;
+
+import java.awt.event.KeyEvent;
+
+/**
+ * <p>
+ * Enumeration of virtual keys.
+ * </p>
+ * 
+ * @version 1.0
+ * @author Patrick Harms
+ */
+public enum VirtualKey {
+
+    ENTER(KeyEvent.VK_ENTER),
+    BACK_SPACE(KeyEvent.VK_BACK_SPACE),
+    TAB(KeyEvent.VK_TAB),
+    CANCEL(KeyEvent.VK_CANCEL),
+    CLEAR(KeyEvent.VK_CLEAR),
+    SHIFT(KeyEvent.VK_SHIFT),
+    CONTROL(KeyEvent.VK_CONTROL),
+    ALT(KeyEvent.VK_ALT),
+    PAUSE(KeyEvent.VK_PAUSE),
+    CAPS_LOCK(KeyEvent.VK_CAPS_LOCK),
+    ESCAPE(KeyEvent.VK_ESCAPE),
+    SPACE(KeyEvent.VK_SPACE),
+    PAGE_UP(KeyEvent.VK_PAGE_UP),
+    PAGE_DOWN(KeyEvent.VK_PAGE_DOWN),
+    END(KeyEvent.VK_END),
+    HOME(KeyEvent.VK_HOME),
+
+    LEFT(KeyEvent.VK_LEFT),
+    UP(KeyEvent.VK_UP),
+    RIGHT(KeyEvent.VK_RIGHT),
+    DOWN(KeyEvent.VK_DOWN),
+
+    COMMA(KeyEvent.VK_COMMA),
+    MINUS(KeyEvent.VK_MINUS),
+    PERIOD(KeyEvent.VK_PERIOD),
+    SLASH(KeyEvent.VK_SLASH),
+
+    DIGIT_0(KeyEvent.VK_0),
+    DIGIT_1(KeyEvent.VK_1),
+    DIGIT_2(KeyEvent.VK_2),
+    DIGIT_3(KeyEvent.VK_3),
+    DIGIT_4(KeyEvent.VK_4),
+    DIGIT_5(KeyEvent.VK_5),
+    DIGIT_6(KeyEvent.VK_6),
+    DIGIT_7(KeyEvent.VK_7),
+    DIGIT_8(KeyEvent.VK_8),
+    DIGIT_9(KeyEvent.VK_9),
+
+    SEMICOLON(KeyEvent.VK_SEMICOLON),
+    EQUALS(KeyEvent.VK_EQUALS),
+
+    LETTER_A(KeyEvent.VK_A),
+    LETTER_B(KeyEvent.VK_B),
+    LETTER_C(KeyEvent.VK_C),
+    LETTER_D(KeyEvent.VK_D),
+    LETTER_E(KeyEvent.VK_E),
+    LETTER_F(KeyEvent.VK_F),
+    LETTER_G(KeyEvent.VK_G),
+    LETTER_H(KeyEvent.VK_H),
+    LETTER_I(KeyEvent.VK_I),
+    LETTER_J(KeyEvent.VK_J),
+    LETTER_K(KeyEvent.VK_K),
+    LETTER_L(KeyEvent.VK_L),
+    LETTER_M(KeyEvent.VK_M),
+    LETTER_N(KeyEvent.VK_N),
+    LETTER_O(KeyEvent.VK_O),
+    LETTER_P(KeyEvent.VK_P),
+    LETTER_Q(KeyEvent.VK_Q),
+    LETTER_R(KeyEvent.VK_R),
+    LETTER_S(KeyEvent.VK_S),
+    LETTER_T(KeyEvent.VK_T),
+    LETTER_U(KeyEvent.VK_U),
+    LETTER_V(KeyEvent.VK_V),
+    LETTER_W(KeyEvent.VK_W),
+    LETTER_X(KeyEvent.VK_X),
+    LETTER_Y(KeyEvent.VK_Y),
+    LETTER_Z(KeyEvent.VK_Z),
+
+    OPEN_BRACKET(KeyEvent.VK_OPEN_BRACKET),
+    BACK_SLASH(KeyEvent.VK_BACK_SLASH),
+    CLOSE_BRACKET(KeyEvent.VK_CLOSE_BRACKET),
+
+    NUMPAD_0(KeyEvent.VK_NUMPAD0),
+    NUMPAD_1(KeyEvent.VK_NUMPAD1),
+    NUMPAD_2(KeyEvent.VK_NUMPAD2),
+    NUMPAD_3(KeyEvent.VK_NUMPAD3),
+    NUMPAD_4(KeyEvent.VK_NUMPAD4),
+    NUMPAD_5(KeyEvent.VK_NUMPAD5),
+    NUMPAD_6(KeyEvent.VK_NUMPAD6),
+    NUMPAD_7(KeyEvent.VK_NUMPAD7),
+    NUMPAD_8(KeyEvent.VK_NUMPAD8),
+    NUMPAD_9(KeyEvent.VK_NUMPAD9),
+    MULTIPLY(KeyEvent.VK_MULTIPLY),
+    ADD(KeyEvent.VK_ADD),
+
+    SEPARATOR(KeyEvent.VK_SEPARATOR),
+
+    SUBTRACT(KeyEvent.VK_SUBTRACT),
+    DECIMAL(KeyEvent.VK_DECIMAL),
+    DIVIDE(KeyEvent.VK_DIVIDE),
+    DELETE(KeyEvent.VK_DELETE),
+    NUM_LOCK(KeyEvent.VK_NUM_LOCK),
+    SCROLL_LOCK(KeyEvent.VK_SCROLL_LOCK),
+
+    F1(KeyEvent.VK_F1),
+    F2(KeyEvent.VK_F2),
+    F3(KeyEvent.VK_F3),
+    F4(KeyEvent.VK_F4),
+    F5(KeyEvent.VK_F5),
+    F6(KeyEvent.VK_F6),
+    F7(KeyEvent.VK_F7),
+    F8(KeyEvent.VK_F8),
+    F9(KeyEvent.VK_F9),
+    F10(KeyEvent.VK_F10),
+    F11(KeyEvent.VK_F11),
+    F12(KeyEvent.VK_F12),
+    F13(KeyEvent.VK_F13),
+    F14(KeyEvent.VK_F14),
+    F15(KeyEvent.VK_F15),
+    F16(KeyEvent.VK_F16),
+    F17(KeyEvent.VK_F17),
+    F18(KeyEvent.VK_F18),
+    F19(KeyEvent.VK_F19),
+    F20(KeyEvent.VK_F20),
+    F21(KeyEvent.VK_F21),
+    F22(KeyEvent.VK_F22),
+    F23(KeyEvent.VK_F23),
+    F24(KeyEvent.VK_F24),
+
+    PRINTSCREEN(KeyEvent.VK_PRINTSCREEN),
+    INSERT(KeyEvent.VK_INSERT),
+    HELP(KeyEvent.VK_HELP),
+    META(KeyEvent.VK_META),
+
+    BACK_QUOTE(KeyEvent.VK_BACK_QUOTE),
+    QUOTE(KeyEvent.VK_QUOTE),
+
+    KP_UP(KeyEvent.VK_KP_UP),
+    KP_DOWN(KeyEvent.VK_KP_DOWN),
+    KP_LEFT(KeyEvent.VK_KP_LEFT),
+    KP_RIGHT(KeyEvent.VK_KP_RIGHT),
+
+    DEAD_GRAVE(KeyEvent.VK_DEAD_GRAVE),
+    DEAD_ACUTE(KeyEvent.VK_DEAD_ACUTE),
+    DEAD_CIRCUMFLEX(KeyEvent.VK_DEAD_CIRCUMFLEX),
+    DEAD_TILDE(KeyEvent.VK_DEAD_TILDE),
+    DEAD_MACRON(KeyEvent.VK_DEAD_MACRON),
+    DEAD_BREVE(KeyEvent.VK_DEAD_BREVE),
+    DEAD_ABOVEDOT(KeyEvent.VK_DEAD_ABOVEDOT),
+    DEAD_DIAERESIS(KeyEvent.VK_DEAD_DIAERESIS),
+    DEAD_ABOVERING(KeyEvent.VK_DEAD_ABOVERING),
+    DEAD_DOUBLEACUTE(KeyEvent.VK_DEAD_DOUBLEACUTE),
+    DEAD_CARON(KeyEvent.VK_DEAD_CARON),
+    DEAD_CEDILLA(KeyEvent.VK_DEAD_CEDILLA),
+    DEAD_OGONEK(KeyEvent.VK_DEAD_OGONEK),
+    DEAD_IOTA(KeyEvent.VK_DEAD_IOTA),
+    DEAD_VOICED_SOUND(KeyEvent.VK_DEAD_VOICED_SOUND),
+    DEAD_SEMIVOICED_SOUND(KeyEvent.VK_DEAD_SEMIVOICED_SOUND),
+
+    AMPERSAND(KeyEvent.VK_AMPERSAND),
+    ASTERISK(KeyEvent.VK_ASTERISK),
+    QUOTEDBL(KeyEvent.VK_QUOTEDBL),
+    LESS(KeyEvent.VK_LESS),
+    GREATER(KeyEvent.VK_GREATER),
+    BRACELEFT(KeyEvent.VK_BRACELEFT),
+    BRACERIGHT(KeyEvent.VK_BRACERIGHT),
+
+    AT(KeyEvent.VK_AT),
+    COLON(KeyEvent.VK_COLON),
+    CIRCUMFLEX(KeyEvent.VK_CIRCUMFLEX),
+    DOLLAR(KeyEvent.VK_DOLLAR),
+    EURO_SIGN(KeyEvent.VK_EURO_SIGN),
+    EXCLAMATION_MARK(KeyEvent.VK_EXCLAMATION_MARK),
+    INVERTED_EXCLAMATION_MARK(KeyEvent.VK_INVERTED_EXCLAMATION_MARK),
+    LEFT_PARENTHESIS(KeyEvent.VK_LEFT_PARENTHESIS),
+    NUMBER_SIGN(KeyEvent.VK_NUMBER_SIGN),
+    PLUS(KeyEvent.VK_PLUS),
+    RIGHT_PARENTHESIS(KeyEvent.VK_RIGHT_PARENTHESIS),
+    UNDERSCORE(KeyEvent.VK_UNDERSCORE),
+
+    WINDOWS(KeyEvent.VK_WINDOWS),
+    CONTEXT_MENU(KeyEvent.VK_CONTEXT_MENU),
+
+    FINAL(KeyEvent.VK_FINAL),
+    CONVERT(KeyEvent.VK_CONVERT),
+    NONCONVERT(KeyEvent.VK_NONCONVERT),
+    ACCEPT(KeyEvent.VK_ACCEPT),
+    MODECHANGE(KeyEvent.VK_MODECHANGE),
+    KANA(KeyEvent.VK_KANA),
+    KANJI(KeyEvent.VK_KANJI),
+    ALPHANUMERIC(KeyEvent.VK_ALPHANUMERIC),
+    KATAKANA(KeyEvent.VK_KATAKANA),
+    HIRAGANA(KeyEvent.VK_HIRAGANA),
+    FULL_WIDTH(KeyEvent.VK_FULL_WIDTH),
+    HALF_WIDTH(KeyEvent.VK_HALF_WIDTH),
+    ROMAN_CHARACTERS(KeyEvent.VK_ROMAN_CHARACTERS),
+    ALL_CANDIDATES(KeyEvent.VK_ALL_CANDIDATES),
+    PREVIOUS_CANDIDATE(KeyEvent.VK_PREVIOUS_CANDIDATE),
+    CODE_INPUT(KeyEvent.VK_CODE_INPUT),
+    JAPANESE_KATAKANA(KeyEvent.VK_JAPANESE_KATAKANA),
+    JAPANESE_HIRAGANA(KeyEvent.VK_JAPANESE_HIRAGANA),
+    JAPANESE_ROMAN(KeyEvent.VK_JAPANESE_ROMAN),
+    KANA_LOCK(KeyEvent.VK_KANA_LOCK),
+    INPUT_METHOD_ON_OFF(KeyEvent.VK_INPUT_METHOD_ON_OFF),
+
+    CUT(KeyEvent.VK_CUT),
+    COPY(KeyEvent.VK_COPY),
+    PASTE(KeyEvent.VK_PASTE),
+    UNDO(KeyEvent.VK_UNDO),
+    AGAIN(KeyEvent.VK_AGAIN),
+    FIND(KeyEvent.VK_FIND),
+    PROPS(KeyEvent.VK_PROPS),
+    STOP(KeyEvent.VK_STOP),
+    COMPOSE(KeyEvent.VK_COMPOSE),
+    ALT_GRAPH(KeyEvent.VK_ALT_GRAPH),
+    BEGIN(KeyEvent.VK_BEGIN),
+
+    UNDEFINED(KeyEvent.VK_UNDEFINED);
+
+    /*
+     * BAR(KeyEvent.VK_UNDEFINED),
+     * APOSTROPHE(KeyEvent.VK_UNDEFINED),
+     * QUESTIONMARK(KeyEvent.VK_UNDEFINED),
+     * DEGREE(KeyEvent.VK_UNDEFINED),
+     * HENKAN_MODE(KeyEvent.VK_UNDEFINED),
+     * MUHENKAN(KeyEvent.VK_UNDEFINED),
+     * EISU_TOGGLE(KeyEvent.VK_UNDEFINED),
+     * HANGUL(KeyEvent.VK_UNDEFINED),
+     * HANGUL_HANJA(KeyEvent.VK_UNDEFINED),
+     * EXECUTE(KeyEvent.VK_UNDEFINED);
+     */
+
+    /**
+     * <p>
+     * Virtual key code of the virtual key.
+     * </p>
+     */
+    private int virtualKeyCode = -1;
+
+    /**
+     * <p>
+     * Description of the virtual key.
+     * </p>
+     */
+    private String description;
+
+    /**
+     * <p>
+     * Constructor. Creates a new VirtualKey.
+     * </p>
+     * 
+     * @param virtualKeyCode
+     *            key code of the virtual key
+     */
+    private VirtualKey(int virtualKeyCode) {
+        this.virtualKeyCode = virtualKeyCode;
+        this.description = KeyEvent.getKeyText(this.virtualKeyCode);
+    }
+
+    /**
+     * <p>
+     * Returns the description of the virtual key.
+     * </p>
+     * 
+     * @return the description.
+     */
+    String getDescription() {
+        return description;
+    }
+
+    /**
+     * <p>
+     * Returns whether the key is a combination key (e.g., shift, alt) or not.
+     * </p>
+     * 
+     * @return true, if the key is a combiniation key; false otherwise
+     */
+    public boolean isCombinationKey() {
+        switch (this)
+        {
+            case SHIFT:
+            case CONTROL:
+            case ALT:
+            case ALT_GRAPH:
+            case WINDOWS:
+                return true;
+
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * <p>
+     * Returns whether the key is a lock key (e.g., caps lock, num lock) or not.
+     * </p>
+     * 
+     * @return true, if the key is a lock key; false otherwise
+     */
+    public boolean isLockKey() {
+        switch (this)
+        {
+            case CAPS_LOCK:
+            case NUM_LOCK:
+            case SCROLL_LOCK:
+                return true;
+
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * <p>
+     * Returns whether the key is shift.
+     * </p>
+     * 
+     * @return true, if the key is shift; false otherwise
+     */
+    public boolean isShiftKey() {
+        switch (this)
+        {
+            case SHIFT:
+                return true;
+
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * <p>
+     * Returns whether the is an alt key.
+     * </p>
+     * 
+     * @return true, if the key is alt or altgr; false otherwise
+     */
+    public boolean isAltKey() {
+        switch (this)
+        {
+            case ALT:
+            case ALT_GRAPH:
+                return true;
+
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * <p>
+     * Returns whether the key is control.
+     * </p>
+     * 
+     * @return true, if the key is control; false otherwise
+     */
+    public boolean isControlKey() {
+        switch (this)
+        {
+            case CONTROL:
+                return true;
+
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * <p>
+     * Returns whether the key is the windows key.
+     * </p>
+     * 
+     * @return true, if the key is the windows key; false otherwise
+     */
+    public boolean isWindowsKey() {
+        switch (this)
+        {
+            case WINDOWS:
+                return true;
+
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * <p>
+     * Returns whether the key is the meta key.
+     * </p>
+     * 
+     * @return true, if the key is the meta key; false otherwise
+     */
+    public boolean isMetaKey() {
+        switch (this)
+        {
+            case META:
+                return true;
+
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * <p>
+     * Returns whether the key is a letter.
+     * </p>
+     * 
+     * @return true, if the key is a letter; false otherwise
+     */
+    public boolean isLetter() {
+        if (virtualKeyCode > -1) {
+            return Character.isLetter((char) virtualKeyCode);
+        }
+        else {
+            return false;
+        }
+    }
+
+    /**
+     * <p>
+     * Returns whether the key is a digit.
+     * </p>
+     * 
+     * @return true, if the key is a digit; false otherwise
+     */
+    public boolean isDigit() {
+        if (virtualKeyCode > -1) {
+            return Character.isDigit(virtualKeyCode);
+        }
+        else {
+            return false;
+        }
+    }
+
+    /**
+     * <p>
+     * Parses an {@link String} and returns the respective VirtualKey if possible.
+     * </p>
+     * 
+     * @param numberString
+     *            String representation of the virtual key
+     * @return created VirtualKey
+     * @throws IllegalArgumentException
+     *             thrown if there is no VirtualKey that correlates to string
+     */
+    public static VirtualKey parseVirtualKey(String string) {
+        int virtualKeyCode = Integer.parseInt(string);
+        for (VirtualKey key1 : VirtualKey.values()) {
+            if (key1.virtualKeyCode == virtualKeyCode) {
+                return key1;
+            }
+        }
+
+        throw new IllegalArgumentException("there is no virtual key with id " + string);
+    }
+
+    /**
+     * <p>
+     * Returns the VirtualKey associated with an integer.
+     * </p>
+     * 
+     * @param number
+     *            integer to which the according VirtualKey is returned
+     * @return the VirtualKey
+     * @throws IllegalArgumentException
+     *             thrown if there is no VirtualKey that correlates to number
+     */
+    public static VirtualKey valueOf(int number) {
+        for (VirtualKey virtualKey : VirtualKey.values()) {
+            if (virtualKey.virtualKeyCode == number) {
+                return virtualKey;
+            }
+        }
+
+        throw new IllegalArgumentException("there is no virtual key with number " + number);
+    }
+
+}
Index: /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/VirtualKeySynonyms.java
===================================================================
--- /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/VirtualKeySynonyms.java	(revision 901)
+++ /trunk/autoquest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/VirtualKeySynonyms.java	(revision 901)
@@ -0,0 +1,103 @@
+
+package de.ugoe.cs.tasktree.keyboardmaps;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+
+import de.ugoe.cs.util.console.Console;
+
+/**
+ * <p>
+ * Helper class to handle synonymous {@link VirtualKey}s.
+ * </p>
+ * 
+ * @version 1.0
+ * @author Patrick Harms
+ */
+class VirtualKeySynonyms {
+
+    /**
+     * <p>
+     * Map of synonymous keys.
+     * </p>
+     */
+    private Map<Integer, List<VirtualKey>> synonyms = new HashMap<Integer, List<VirtualKey>>();
+
+    /**
+     * <p>
+     * Mapping of {@link VirtualKey}s to integer Ids.
+     * </p>
+     */
+    private Map<VirtualKey, Integer> keyIds = new HashMap<VirtualKey, Integer>();
+
+    /**
+     * <p>
+     * Adds a new synonymous key.
+     * </p>
+     * 
+     * @param keyId
+     *            id of the synonym
+     * @param virtualKey
+     *            the synonym
+     */
+    public void add(int keyId, VirtualKey virtualKey) {
+        List<VirtualKey> synonymList = synonyms.get(keyId);
+
+        if (synonymList == null) {
+            synonymList = new ArrayList<VirtualKey>();
+            synonyms.put(keyId, synonymList);
+        }
+
+        if (!synonymList.contains(virtualKey)) {
+            // ensure that the latest determined virtual keys are considered first
+            synonymList.add(0, virtualKey);
+        }
+
+        Integer existingKeyId = keyIds.get(virtualKey);
+
+        if ((existingKeyId != null) && (existingKeyId != keyId)) {
+            Console.traceln(Level.FINEST, "virtual key " + virtualKey + " is mapped to more " +
+                "than one key id (current is " + existingKeyId + ", new is " + keyId +
+                "). New key id will be used (" + keyId + ").");
+        }
+
+        keyIds.put(virtualKey, keyId);
+    }
+
+    /**
+     * <p>
+     * Returns whether a key is contained in the set of synonyms.
+     * </p>
+     * 
+     * @param keyId
+     *            id of the key
+     * @return true, if the key is contained; false otherwise
+     */
+    public boolean containsKey(int keyId) {
+        return synonyms.containsKey(keyId);
+    }
+
+    /**
+     * <p>
+     * Returns all synonyms known for a given key.
+     * </p>
+     * 
+     * @param keyId
+     *            the id of the key
+     * @return the synonyms
+     */
+    public VirtualKey[] getVirtualKeySynonyms(int keyId) {
+        List<VirtualKey> virtualKeys = synonyms.get(keyId);
+        if (virtualKeys != null) {
+            return virtualKeys.toArray(new VirtualKey[virtualKeys.size()]);
+        }
+        else {
+            Console.traceln(Level.WARNING, "no virtual key define for key id " + keyId);
+            return null;
+        }
+    }
+
+}
Index: /trunk/autoquest-misc/src/main/resources/keymaps/ar
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/ar	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/ar	(revision 901)
@@ -0,0 +1,98 @@
+# generated from XKB map ar
+include common
+map 0x401
+exclam 0x02 shift
+at 0x03 shift
+numbersign 0x04 shift
+dollar 0x05 shift
+percent 0x06 shift
+asciicircum 0x07 shift
+ampersand 0x08 shift
+asterisk 0x09 shift
+parenleft 0x0a shift
+parenright 0x0b shift
+minus 0x0c
+underscore 0x0c shift
+equal 0x0d
+plus 0x0d shift
+Arabic_dad 0x10 altgr
+Arabic_fatha 0x10 shift altgr
+Arabic_sad 0x11 altgr
+Arabic_fathatan 0x11 shift altgr
+Arabic_theh 0x12 altgr
+Arabic_damma 0x12 shift altgr
+Arabic_qaf 0x13 altgr
+Arabic_dammatan 0x13 shift altgr
+Arabic_feh 0x14 altgr
+UFEF9 0x14 shift altgr
+Arabic_ghain 0x15 altgr
+Arabic_hamzaunderalef 0x15 shift altgr
+Arabic_ain 0x16 altgr
+grave 0x16 shift altgr
+Arabic_ha 0x17 altgr
+division 0x17 shift altgr
+Arabic_khah 0x18 altgr
+multiply 0x18 shift altgr
+Arabic_hah 0x19 altgr
+Arabic_semicolon 0x19 shift altgr
+bracketleft 0x1a
+braceleft 0x1a shift
+Arabic_jeem 0x1a altgr
+bracketright 0x1b
+braceright 0x1b shift
+Arabic_dal 0x1b altgr
+Arabic_sheen 0x1e altgr
+backslash 0x1e shift altgr
+Arabic_seen 0x1f altgr
+Arabic_yeh 0x20 altgr
+bracketleft 0x20 shift altgr
+Arabic_beh 0x21 altgr
+bracketright 0x21 shift altgr
+Arabic_lam 0x22 altgr
+UFEF7 0x22 shift altgr
+Arabic_alef 0x23 altgr
+Arabic_hamzaonalef 0x23 shift altgr
+Arabic_teh 0x24 altgr
+Arabic_tatweel 0x24 shift altgr
+Arabic_noon 0x25 altgr
+Arabic_comma 0x25 shift altgr
+Arabic_meem 0x26 altgr
+slash 0x26 shift altgr
+semicolon 0x27
+colon 0x27 shift
+Arabic_kaf 0x27 altgr
+apostrophe 0x28
+quotedbl 0x28 shift
+Arabic_tah 0x28 altgr
+grave 0x29
+asciitilde 0x29 shift
+Arabic_thal 0x29 altgr
+Arabic_shadda 0x29 shift altgr
+backslash 0x2b
+bar 0x2b shift
+less 0x2b altgr
+greater 0x2b shift altgr
+Arabic_hamzaonyeh 0x2c altgr
+asciitilde 0x2c shift altgr
+Arabic_hamza 0x2d altgr
+Arabic_sukun 0x2d shift altgr
+Arabic_hamzaonwaw 0x2e altgr
+Arabic_kasra 0x2e shift altgr
+Arabic_ra 0x2f altgr
+Arabic_kasratan 0x2f shift altgr
+UFEFB 0x30 altgr
+UFEF5 0x30 shift altgr
+Arabic_alefmaksura 0x31 altgr
+Arabic_maddaonalef 0x31 shift altgr
+Arabic_tehmarbuta 0x32 altgr
+apostrophe 0x32 shift altgr
+comma 0x33
+less 0x33 shift
+Arabic_waw 0x33 altgr
+period 0x34
+greater 0x34 shift
+Arabic_zain 0x34 altgr
+slash 0x35
+question 0x35 shift
+Arabic_zah 0x35 altgr
+Arabic_question_mark 0x35 shift altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/common
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/common	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/common	(revision 901)
@@ -0,0 +1,229 @@
+include modifiers
+
+#
+# Top row
+#
+1 0x2
+2 0x3
+3 0x4
+4 0x5
+5 0x6
+6 0x7
+7 0x8
+8 0x9
+9 0xa
+0 0xb
+BackSpace 0xe
+
+#
+# QWERTY first row
+#
+Tab 0xf localstate
+ISO_Left_Tab 0xf shift
+q 0x10 addupper
+w 0x11 addupper
+e 0x12 addupper
+sequence egrave dead_grave e
+sequence Egrave dead_grave E
+sequence eacute dead_acute e
+sequence Eacute dead_acute E
+sequence ecircumflex dead_circumflex e 
+sequence Ecircumflex dead_circumflex E 
+sequence ediaeresis dead_diaeresis e
+sequence Ediaeresis dead_diaeresis E
+r 0x13 addupper
+t 0x14 addupper
+y 0x15 addupper
+sequence ygrave dead_grave y
+sequence Ygrave dead_grave Y
+sequence yacute dead_acute y
+sequence Yacute dead_acute Y
+sequence ycircumflex dead_circumflex y
+sequence Ycircumflex dead_circumflex Y 
+sequence ydiaeresis dead_diaeresis y
+sequence Ydiaeresis dead_diaeresis Y
+u 0x16 addupper
+sequence ugrave dead_grave u
+sequence Ugrave dead_grave U
+sequence uacute dead_acute u
+sequence Uacute dead_acute U
+sequence ucircumflex dead_circumflex u 
+sequence Ucircumflex dead_circumflex U 
+sequence udiaeresis dead_diaeresis u
+sequence Udiaeresis dead_diaeresis U
+i 0x17 addupper
+sequence igrave dead_grave i
+sequence Igrave dead_grave I
+sequence iacute dead_acute i
+sequence Iacute dead_acute I
+sequence icircumflex dead_circumflex i 
+sequence Icircumflex dead_circumflex I 
+sequence idiaeresis dead_diaeresis i
+sequence Idiaeresis dead_diaeresis I
+o 0x18 addupper
+sequence ograve dead_grave o
+sequence Ograve dead_grave O
+sequence oacute dead_acute o
+sequence Oacute dead_acute O
+sequence ocircumflex dead_circumflex o 
+sequence Ocircumflex dead_circumflex O 
+sequence odiaeresis dead_diaeresis o
+sequence Odiaeresis dead_diaeresis O
+sequence otilde dead_tilde o
+sequence Otilde dead_tilde O
+p 0x19 addupper
+
+#
+# QWERTY second row
+#
+a 0x1e addupper
+sequence agrave dead_grave a
+sequence Agrave dead_grave A
+sequence aacute dead_acute a
+sequence Aacute dead_acute A
+sequence acircumflex dead_circumflex a 
+sequence Acircumflex dead_circumflex A 
+sequence adiaeresis dead_diaeresis a
+sequence Adiaeresis dead_diaeresis A
+sequence aring dead_abovering a
+sequence Aring dead_abovering A
+sequence atilde dead_tilde a
+sequence Atilde dead_tilde A
+s 0x1f addupper
+d 0x20 addupper
+f 0x21 addupper
+g 0x22 addupper
+h 0x23 addupper
+j 0x24 addupper
+k 0x25 addupper
+l 0x26 addupper
+Return 0x1c localstate
+
+#
+# QWERTY third row
+#
+z 0x2c addupper
+x 0x2d addupper
+c 0x2e addupper
+sequence ccedilla dead_cedilla c
+sequence Ccedilla dead_cedilla C
+v 0x2f addupper
+b 0x30 addupper
+n 0x31 addupper
+sequence ntilde dead_tilde n
+sequence Ntilde dead_tilde N
+m 0x32 addupper
+
+space 0x39 localstate
+
+less 0x56
+greater 0x56 shift
+bar 0x56 altgr
+brokenbar 0x56 shift altgr
+
+#
+# Translations for some other dead keys
+#
+sequence asciitilde dead_tilde space
+sequence diaeresis dead_diaeresis space
+sequence asciicircum dead_circumflex space
+sequence apostrophe dead_acute space
+sequence grave dead_grave space
+sequence acute dead_acute space
+
+#
+# Esc and Function keys
+#
+Escape 0x1 localstate
+F1 0x3b localstate
+F2 0x3c localstate
+F3 0x3d localstate
+F4 0x3e localstate
+F5 0x3f localstate
+F6 0x40 localstate
+F7 0x41 localstate
+F8 0x42 localstate
+F9 0x43 localstate
+F10 0x44 localstate
+F11 0x57 localstate
+SunF36 0x57 localstate
+F12 0x58 localstate
+SunF37 0x58 localstate
+
+# Printscreen, Scrollock and Pause
+# Printscreen really requires four scancodes (0xe0, 0x2a, 0xe0, 0x37),
+# but (0xe0, 0x37) seems to work. 
+Print 0xb7 localstate
+Sys_Req 0xb7 localstate
+Execute 0xb7 localstate
+F22 0xb7 localstate
+Scroll_Lock 0x46
+F23 0x46
+
+#
+# Insert - PgDown
+#
+Insert 0xd2 localstate
+Delete 0xd3 localstate
+Home 0xc7 localstate
+End 0xcf localstate
+Page_Up 0xc9 localstate
+Page_Down 0xd1 localstate
+
+#
+# Arrow keys
+#
+Left 0xcb localstate
+Up 0xc8 localstate
+Down 0xd0 localstate
+Right 0xcd localstate
+
+#
+# Numpad
+#
+Num_Lock 0x45
+KP_Divide 0xb5 localstate
+KP_Multiply 0x37 localstate
+KP_Subtract 0x4a localstate
+KP_Add 0x4e localstate
+KP_Enter 0x9c localstate
+
+KP_Decimal 0x53 numlock
+KP_Separator 0x53 numlock
+KP_Delete 0x53
+
+KP_0 0x52 numlock
+KP_Insert 0x52 localstate
+
+KP_1 0x4f numlock
+KP_End 0x4f localstate
+
+KP_2 0x50 numlock
+KP_Down 0x50 localstate
+
+KP_3 0x51 numlock
+KP_Next 0x51 localstate
+
+KP_4 0x4b numlock
+KP_Left 0x4b localstate
+
+KP_5 0x4c numlock
+KP_Begin 0x4c localstate
+
+KP_6 0x4d numlock
+KP_Right 0x4d localstate
+
+KP_7 0x47 numlock
+KP_Home 0x47 localstate
+
+KP_8 0x48 numlock
+KP_Up 0x48 localstate
+
+KP_9 0x49 numlock
+KP_Prior 0x49 localstate
+
+#
+# Inhibited keys
+#
+Caps_Lock 0x0 inhibit
+Multi_key 0x0 inhibit
Index: /trunk/autoquest-misc/src/main/resources/keymaps/cs
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/cs	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/cs	(revision 901)
@@ -0,0 +1,87 @@
+# Czech keymap
+include common
+map 0x405
+
+# AltGr
+ISO_Level3_Shift 0xb8
+
+#
+# Top row
+#
+
+# `
+grave 0x29
+asciitilde 0x29 shift
+# 1
+exclam 0x2 shift
+# 2
+at 0x3 shift
+ecaron 0x3 altgr
+# 3
+numbersign 0x4 shift
+# 4
+dollar 0x5 shift
+# 5
+percent 0x6 shift
+# 6
+asciicircum 0x7 shift
+# 7
+ampersand 0x8 shift
+# 8
+asterisk 0x9 shift
+# 9
+parenleft 0xa shift
+# 0
+parenright 0xb shift
+# -
+minus 0xc
+underscore 0xc shift
+# =
+equal 0xd
+plus 0xd shift
+
+
+#
+# QWERTZ first row
+#
+
+# q
+q 0x10 altgr
+# e
+e 0x12 altgr
+# [
+bracketleft 0x1a
+braceleft 0x1a shift
+# ]
+bracketright 0x1b
+braceright 0x1b shift
+
+#
+# QWERTZ second row
+#
+
+# ;
+semicolon 0x27
+# ;
+colon 0x27 shift
+# '
+apostrophe 0x28
+# '
+quotedbl 0x28 shift
+
+#
+# QWERTZ third row
+#
+
+# v
+v 0x2f altgr
+# ,
+comma 0x33
+less 0x33 shift
+# .
+period 0x34
+greater 0x34 shift
+# /
+slash 0x35
+question 0x35 shift
+
Index: /trunk/autoquest-misc/src/main/resources/keymaps/da
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/da	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/da	(revision 901)
@@ -0,0 +1,120 @@
+# generated from XKB map dk
+include common
+map 0x406
+exclam 0x02 shift
+exclamdown 0x02 altgr
+onesuperior 0x02 shift altgr
+quotedbl 0x03 shift
+at 0x03 altgr
+twosuperior 0x03 shift altgr
+numbersign 0x04 shift
+sterling 0x04 altgr
+threesuperior 0x04 shift altgr
+currency 0x05 shift
+dollar 0x05 altgr
+onequarter 0x05 shift altgr
+percent 0x06 shift
+onehalf 0x06 altgr
+cent 0x06 shift altgr
+ampersand 0x07 shift
+yen 0x07 altgr
+fiveeighths 0x07 shift altgr
+slash 0x08 shift
+braceleft 0x08 altgr
+division 0x08 shift altgr
+parenleft 0x09 shift
+bracketleft 0x09 altgr
+guillemotleft 0x09 shift altgr
+parenright 0x0a shift
+bracketright 0x0a altgr
+guillemotright 0x0a shift altgr
+equal 0x0b shift
+braceright 0x0b altgr
+degree 0x0b shift altgr
+plus 0x0c
+question 0x0c shift
+plusminus 0x0c altgr
+questiondown 0x0c shift altgr
+dead_acute 0x0d
+dead_grave 0x0d shift
+bar 0x0d altgr
+brokenbar 0x0d shift altgr
+Greek_OMEGA 0x10 shift altgr
+lstroke 0x11 altgr
+Lstroke 0x11 shift altgr
+EuroSign 0x12 altgr
+cent 0x12 shift altgr
+registered 0x13 altgr
+thorn 0x14 altgr
+THORN 0x14 shift altgr
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oe 0x18 altgr
+OE 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+aring 0x1a
+Aring 0x1a shift
+dead_diaeresis 0x1a altgr
+dead_abovering 0x1a shift altgr
+dead_diaeresis 0x1b
+dead_circumflex 0x1b shift
+dead_tilde 0x1b altgr
+dead_caron 0x1b shift altgr
+ordfeminine 0x1e altgr
+masculine 0x1e shift altgr
+ssharp 0x1f altgr
+section 0x1f shift altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+dstroke 0x21 altgr
+ordfeminine 0x21 shift altgr
+eng 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+kra 0x25 altgr
+lstroke 0x26 altgr
+Lstroke 0x26 shift altgr
+ae 0x27
+AE 0x27 shift
+oslash 0x28
+Ooblique 0x28 shift
+dead_caron 0x28 shift altgr
+onehalf 0x29
+section 0x29 shift
+threequarters 0x29 altgr
+paragraph 0x29 shift altgr
+apostrophe 0x2b
+asterisk 0x2b shift
+dead_doubleacute 0x2b altgr
+multiply 0x2b shift altgr
+guillemotleft 0x2c altgr
+guillemotright 0x2d altgr
+copyright 0x2e altgr
+leftdoublequotemark 0x2f altgr
+grave 0x2f shift altgr
+rightdoublequotemark 0x30 altgr
+mu 0x32 altgr
+masculine 0x32 shift altgr
+comma 0x33
+semicolon 0x33 shift
+dead_cedilla 0x33 altgr
+dead_ogonek 0x33 shift altgr
+period 0x34
+colon 0x34 shift
+periodcentered 0x34 altgr
+dead_abovedot 0x34 shift altgr
+minus 0x35
+underscore 0x35 shift
+hyphen 0x35 altgr
+macron 0x35 shift altgr
+nobreakspace 0x39 altgr
+less 0x56
+greater 0x56 shift
+backslash 0x56 altgr
+notsign 0x56 shift altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/de
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/de	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/de	(revision 901)
@@ -0,0 +1,114 @@
+# generated from XKB map de
+include common
+map 0x407
+exclam 0x02 shift
+onesuperior 0x02 altgr
+exclamdown 0x02 shift altgr
+quotedbl 0x03 shift
+twosuperior 0x03 altgr
+oneeighth 0x03 shift altgr
+section 0x04 shift
+threesuperior 0x04 altgr
+sterling 0x04 shift altgr
+dollar 0x05 shift
+onequarter 0x05 altgr
+currency 0x05 shift altgr
+percent 0x06 shift
+onehalf 0x06 altgr
+threeeighths 0x06 shift altgr
+ampersand 0x07 shift
+threequarters 0x07 altgr
+fiveeighths 0x07 shift altgr
+slash 0x08 shift
+braceleft 0x08 altgr
+seveneighths 0x08 shift altgr
+parenleft 0x09 shift
+bracketleft 0x09 altgr
+trademark 0x09 shift altgr
+parenright 0x0a shift
+bracketright 0x0a altgr
+plusminus 0x0a shift altgr
+equal 0x0b shift
+braceright 0x0b altgr
+ssharp 0x0c
+question 0x0c shift
+backslash 0x0c altgr
+questiondown 0x0c shift altgr
+acute 0x0d
+dead_acute 0x0d
+grave 0x0d shift
+dead_grave 0x0d shift
+dead_cedilla 0x0d altgr
+dead_ogonek 0x0d shift altgr
+at 0x10 altgr
+Greek_OMEGA 0x10 shift altgr
+EuroSign 0x12 altgr
+paragraph 0x13 altgr
+registered 0x13 shift altgr
+tslash 0x14 altgr
+Tslash 0x14 shift altgr
+z 0x15 addupper
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oslash 0x18 altgr
+Ooblique 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+udiaeresis 0x1a
+Udiaeresis 0x1a shift
+dead_diaeresis 0x1a altgr
+dead_abovering 0x1a shift altgr
+plus 0x1b
+asterisk 0x1b shift
+asciitilde 0x1b altgr
+dead_tilde 0x1b altgr
+dead_macron 0x1b shift altgr
+ae 0x1e altgr
+AE 0x1e shift altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+dstroke 0x21 altgr
+ordfeminine 0x21 shift altgr
+eng 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+kra 0x25 altgr
+odiaeresis 0x27
+Odiaeresis 0x27 shift
+dead_doubleacute 0x27 altgr
+adiaeresis 0x28
+Adiaeresis 0x28 shift
+dead_caron 0x28 shift altgr
+asciicircum 0x29
+dead_circumflex 0x29
+degree 0x29 shift
+notsign 0x29 altgr
+numbersign 0x2b
+apostrophe 0x2b shift
+dead_breve 0x2b shift altgr
+y 0x2c addupper
+guillemotleft 0x2c altgr
+guillemotright 0x2d altgr
+cent 0x2e altgr
+copyright 0x2e shift altgr
+leftdoublequotemark 0x2f altgr
+rightdoublequotemark 0x30 altgr
+mu 0x32 altgr
+masculine 0x32 shift altgr
+comma 0x33
+semicolon 0x33 shift
+horizconnector 0x33 altgr
+multiply 0x33 shift altgr
+period 0x34
+colon 0x34 shift
+periodcentered 0x34 altgr
+division 0x34 shift altgr
+minus 0x35
+underscore 0x35 shift
+dead_belowdot 0x35 altgr
+dead_abovedot 0x35 shift altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/de-ch
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/de-ch	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/de-ch	(revision 901)
@@ -0,0 +1,169 @@
+# rdesktop Swiss-German (de-ch) keymap file 
+# 2003-06-03 by noldi@tristar.ch 
+#
+include common
+map 0x00000807
+#
+# Scan Code 1
+section 0x29
+degree 0x29 shift
+notsign 0x29 altgr inhibit
+#
+# Scan Code 2
+plus 0x2 shift
+brokenbar 0x02 altgr
+#
+# Scan Code 3
+quotedbl 0x03 shift
+at 0x03 altgr
+#
+# Scan Code 4
+asterisk 0x04 shift
+numbersign 0x04 altgr
+#
+# Scan Code 5
+ccedilla 0x05 shift
+onequarter 0x05 altgr inhibit
+#
+# Scan Code 6
+percent 0x06 shift
+onehalf 0x06 altgr inhibit
+#
+# Scan Code 7
+ampersand 0x07 shift
+notsign 0x07 altgr
+#
+# Scan Code 8
+slash 0x08 shift
+bar 0x08 altgr
+#
+# Scan Code 9
+parenleft 0x09 shift
+cent 0x09 altgr
+# 
+# Scan Code 10
+parenright 0x0a shift
+#
+# Scan Code 11
+equal 0x0b shift
+braceright 0x0b altgr inhibit
+#
+# Scan Code 12
+apostrophe 0x0c 
+question 0x0c shift
+dead_acute 0x0c altgr
+#
+# Scan Code 13
+dead_circumflex 0x0d
+dead_grave 0x0d shift
+dead_tilde 0x0d altgr
+#
+# Scan Code 19
+EuroSign 0x12 altgr
+#
+# Scan Code 22
+z 0x15 addupper
+#
+# Scan Code 27
+udiaeresis 0x1a
+egrave 0x1a shift
+bracketleft 0x1a altgr
+# 
+# Scan Code 28
+dead_diaeresis 0x1b
+exclam 0x1b shift 
+bracketright 0x1b altgr
+#
+# Scan Code 40
+odiaeresis 0x27
+eacute 0x27 shift
+#
+# Scan Code 41
+adiaeresis 0x28
+agrave 0x28 shift
+braceleft 0x28 altgr
+#
+# Scan Code 42 (only on international keyboards)
+dollar 0x2b
+sterling 0x2b shift
+braceright 0x2b altgr
+#
+# Scan Code 45 (only on international keyboards)
+backslash 0x56 altgr
+#
+# Scan Code 46
+y 0x2c addupper
+# 
+# Scan Code 53
+comma 0x33
+semicolon 0x33 shift
+# 
+# Scan Code 54
+period 0x34
+colon 0x34 shift
+#
+# Scan Code 55
+minus 0x35 
+underscore 0x35 shift
+#
+# Suppress Windows unsupported AltGr keys
+#
+# Scan Code 17
+paragraph 0x10 altgr inhibit
+#
+# Scan Code 21
+tslash 0x14 altgr inhibit
+#
+# Scan Code 22
+leftarrow 0x15 altgr inhibit
+#
+# Scan Code 23
+downarrow 0x16 altgr inhibit
+#
+# Scan Code 24
+rightarrow 0x17 altgr inhibit
+#
+# Scan Code 25
+oslash 0x18 altgr inhibit
+#
+# Scan Code 26
+thorn 0x19 altgr inhibit
+#
+# Scan Code 31
+ae 0x1e altgr inhibit
+#
+# Scan Code 32
+ssharp 0x1f altgr inhibit
+#
+# Scan Code 33
+eth 0x20 altgr inhibit
+#
+# Scan Code 34
+dstroke 0x21 altgr inhibit
+#
+# Scan Code 35
+eng 0x22 altgr inhibit
+#
+# Scan Code 36
+hstroke 0x23 altgr inhibit
+#
+# Scan Code 38
+kra 0x25 altgr inhibit
+#
+# Scan Code 39
+lstroke 0x26 altgr inhibit
+#
+# Scan Code 46
+guillemotleft 0x2c altgr inhibit
+#
+# Scan Code 47
+guillemotright 0x2d altgr inhibit
+#
+# Scan Code 49
+leftdoublequotemark 0x2f altgr inhibit
+#
+# Scan Code 50
+rightdoublequotemark 0x30 altgr inhibit
+#
+# Scan Code 52
+mu 0x32 altgr inhibit
Index: /trunk/autoquest-misc/src/main/resources/keymaps/en-dv
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/en-dv	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/en-dv	(revision 901)
@@ -0,0 +1,216 @@
+# American Dvorak
+map 0x10409
+
+# Note: we are not including the common section
+include modifiers
+
+#
+# Top row
+#
+1 0x2
+2 0x3
+3 0x4
+4 0x5
+5 0x6
+6 0x7
+7 0x8
+8 0x9
+9 0xa
+0 0xb
+BackSpace 0xe
+
+#
+# QWERTY first row
+
+# QWERTY:
+# q w e r t y u i o p
+
+# Dvorak:
+# ' , . p y f g c r l
+
+Tab 0xf localstate
+ISO_Left_Tab 0xf shift
+q 0x2d addupper
+w 0x33 addupper
+e 0x20 addupper
+r 0x18 addupper
+t 0x25 addupper
+y 0x14 addupper
+u 0x21 addupper
+i 0x22 addupper
+o 0x1f addupper
+p 0x13 addupper
+
+#
+# QWERTY second row
+
+# QUERTY:
+# a s d f g h j k l
+
+# Dvorak:
+# a o e u i d h t n
+ 
+a 0x1e addupper
+s 0x27 addupper
+d 0x23 addupper
+f 0x15 addupper
+g 0x16 addupper
+h 0x24 addupper
+j 0x2e addupper
+k 0x2f addupper
+l 0x19 addupper
+Return 0x1c localstate
+
+#
+# QWERTY third row
+
+# QUERTY:
+# z x c v b n m
+
+# Dvorak:
+# ; q j k x b m
+
+z 0x35 addupper
+x 0x30 addupper
+c 0x17 addupper
+v 0x34 addupper
+b 0x31 addupper
+n 0x26 addupper
+m 0x32 addupper
+
+space 0x39 localstate
+
+less 0x56
+greater 0x56 shift
+bar 0x56 altgr
+brokenbar 0x56 shift altgr
+
+#
+# Esc and Function keys
+#
+Escape 0x1 localstate
+F1 0x3b localstate
+F2 0x3c localstate
+F3 0x3d localstate
+F4 0x3e localstate
+F5 0x3f localstate
+F6 0x40 localstate
+F7 0x41 localstate
+F8 0x42 localstate
+F9 0x43 localstate
+F10 0x44 localstate
+F11 0x57 localstate
+SunF36 0x57 localstate
+F12 0x58 localstate
+SunF37 0x58 localstate
+
+# Printscreen, Scrollock and Pause
+# Printscreen really requires four scancodes (0xe0, 0x2a, 0xe0, 0x37),
+# but (0xe0, 0x37) seems to work. 
+Print 0xb7 localstate
+Sys_Req 0xb7 localstate
+Execute 0xb7 localstate
+F22 0xb7 localstate
+Scroll_Lock 0x46
+F23 0x46
+
+#
+# Insert - PgDown
+#
+Insert 0xd2 localstate
+Delete 0xd3 localstate
+Home 0xc7 localstate
+End 0xcf localstate
+Page_Up 0xc9 localstate
+Page_Down 0xd1 localstate
+
+#
+# Arrow keys
+#
+Left 0xcb localstate
+Up 0xc8 localstate
+Down 0xd0 localstate
+Right 0xcd localstate
+
+#
+# Numpad
+#
+Num_Lock 0x45
+KP_Divide 0xb5
+KP_Multiply 0x37
+KP_Subtract 0x4a
+KP_Add 0x4e
+KP_Enter 0x9c
+
+KP_Decimal 0x53 numlock
+KP_Separator 0x53 numlock
+KP_Delete 0x53
+
+KP_0 0x52 numlock
+KP_Insert 0x52
+
+KP_1 0x4f numlock
+KP_End 0x4f
+
+KP_2 0x50 numlock
+KP_Down 0x50
+
+KP_3 0x51 numlock
+KP_Next 0x51
+
+KP_4 0x4b numlock
+KP_Left 0x4b
+
+KP_5 0x4c numlock
+KP_Begin 0x4c
+
+KP_6 0x4d numlock
+KP_Right 0x4d
+
+KP_7 0x47 numlock
+KP_Home 0x47
+
+KP_8 0x48 numlock
+KP_Up 0x48
+
+KP_9 0x49 numlock
+KP_Prior 0x49
+
+#
+# Inhibited keys
+#
+Caps_Lock 0x0 inhibit
+Multi_key 0x0 inhibit
+
+exclam 0x02 shift
+at 0x03 shift
+numbersign 0x04 shift
+dollar 0x05 shift
+percent 0x06 shift
+asciicircum 0x07 shift
+ampersand 0x08 shift
+asterisk 0x09 shift
+parenleft 0x0a shift
+parenright 0x0b shift
+minus 0x28
+underscore 0x28 shift
+equal 0x1b
+plus 0x1b shift
+bracketleft 0x0c
+braceleft 0x0c shift
+bracketright 0x0d
+braceright 0x0d shift
+semicolon 0x2c
+colon 0x2c shift
+apostrophe 0x10
+quotedbl 0x10 shift
+grave 0x29
+asciitilde 0x29 shift
+backslash 0x2b
+bar 0x2b shift
+comma 0x11
+less 0x11 shift
+period 0x12
+greater 0x12 shift
+slash 0x1a
+question 0x1a shift
Index: /trunk/autoquest-misc/src/main/resources/keymaps/en-gb
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/en-gb	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/en-gb	(revision 901)
@@ -0,0 +1,119 @@
+# generated from XKB map gb
+include common
+map 0x809
+exclam 0x02 shift
+onesuperior 0x02 altgr
+exclamdown 0x02 shift altgr
+quotedbl 0x03 shift
+twosuperior 0x03 altgr
+oneeighth 0x03 shift altgr
+sterling 0x04 shift
+threesuperior 0x04 altgr
+dollar 0x05 shift
+EuroSign 0x05 altgr
+percent 0x06 shift
+onehalf 0x06 altgr
+threeeighths 0x06 shift altgr
+asciicircum 0x07 shift
+threequarters 0x07 altgr
+fiveeighths 0x07 shift altgr
+ampersand 0x08 shift
+braceleft 0x08 altgr
+seveneighths 0x08 shift altgr
+asterisk 0x09 shift
+bracketleft 0x09 altgr
+trademark 0x09 shift altgr
+parenleft 0x0a shift
+bracketright 0x0a altgr
+plusminus 0x0a shift altgr
+parenright 0x0b shift
+braceright 0x0b altgr
+degree 0x0b shift altgr
+minus 0x0c
+underscore 0x0c shift
+backslash 0x0c altgr
+questiondown 0x0c shift altgr
+equal 0x0d
+plus 0x0d shift
+dead_cedilla 0x0d altgr
+dead_ogonek 0x0d shift altgr
+at 0x10 altgr
+Greek_OMEGA 0x10 shift altgr
+lstroke 0x11 altgr
+Lstroke 0x11 shift altgr
+paragraph 0x13 altgr
+registered 0x13 shift altgr
+tslash 0x14 altgr
+Tslash 0x14 shift altgr
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oslash 0x18 altgr
+Ooblique 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+bracketleft 0x1a
+braceleft 0x1a shift
+dead_diaeresis 0x1a altgr
+dead_abovering 0x1a shift altgr
+bracketright 0x1b
+braceright 0x1b shift
+dead_tilde 0x1b altgr
+dead_macron 0x1b shift altgr
+ae 0x1e altgr
+AE 0x1e shift altgr
+ssharp 0x1f altgr
+section 0x1f shift altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+dstroke 0x21 altgr
+ordfeminine 0x21 shift altgr
+eng 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+kra 0x25 altgr
+lstroke 0x26 altgr
+Lstroke 0x26 shift altgr
+semicolon 0x27
+colon 0x27 shift
+dead_acute 0x27 altgr
+dead_doubleacute 0x27 shift altgr
+apostrophe 0x28
+at 0x28 shift
+dead_circumflex 0x28 altgr
+dead_caron 0x28 shift altgr
+grave 0x29
+notsign 0x29 shift
+bar 0x29 altgr
+numbersign 0x2b
+asciitilde 0x2b shift
+dead_grave 0x2b altgr
+dead_breve 0x2b shift altgr
+guillemotleft 0x2c altgr
+less 0x2c shift altgr
+guillemotright 0x2d altgr
+greater 0x2d shift altgr
+cent 0x2e altgr
+copyright 0x2e shift altgr
+leftdoublequotemark 0x2f altgr
+rightdoublequotemark 0x30 altgr
+mu 0x32 altgr
+masculine 0x32 shift altgr
+comma 0x33
+less 0x33 shift
+horizconnector 0x33 altgr
+multiply 0x33 shift altgr
+period 0x34
+greater 0x34 shift
+periodcentered 0x34 altgr
+division 0x34 shift altgr
+slash 0x35
+question 0x35 shift
+dead_belowdot 0x35 altgr
+dead_abovedot 0x35 shift altgr
+backslash 0x56
+bar 0x56 shift
Index: /trunk/autoquest-misc/src/main/resources/keymaps/en-us
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/en-us	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/en-us	(revision 901)
@@ -0,0 +1,35 @@
+# generated from XKB map us
+include common
+map 0x409
+exclam 0x02 shift
+at 0x03 shift
+numbersign 0x04 shift
+dollar 0x05 shift
+percent 0x06 shift
+asciicircum 0x07 shift
+ampersand 0x08 shift
+asterisk 0x09 shift
+parenleft 0x0a shift
+parenright 0x0b shift
+minus 0x0c
+underscore 0x0c shift
+equal 0x0d
+plus 0x0d shift
+bracketleft 0x1a
+braceleft 0x1a shift
+bracketright 0x1b
+braceright 0x1b shift
+semicolon 0x27
+colon 0x27 shift
+apostrophe 0x28
+quotedbl 0x28 shift
+grave 0x29
+asciitilde 0x29 shift
+backslash 0x2b
+bar 0x2b shift
+comma 0x33
+less 0x33 shift
+period 0x34
+greater 0x34 shift
+slash 0x35
+question 0x35 shift
Index: /trunk/autoquest-misc/src/main/resources/keymaps/es
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/es	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/es	(revision 901)
@@ -0,0 +1,105 @@
+# generated from XKB map es
+include common
+map 0x40a
+exclam 0x02 shift
+bar 0x02 altgr
+quotedbl 0x03 shift
+at 0x03 altgr
+oneeighth 0x03 shift altgr
+periodcentered 0x04 shift
+numbersign 0x04 altgr
+sterling 0x04 shift altgr
+dollar 0x05 shift
+asciitilde 0x05 altgr
+percent 0x06 shift
+onehalf 0x06 altgr
+threeeighths 0x06 shift altgr
+ampersand 0x07 shift
+notsign 0x07 altgr
+fiveeighths 0x07 shift altgr
+slash 0x08 shift
+seveneighths 0x08 shift altgr
+parenleft 0x09 shift
+trademark 0x09 shift altgr
+parenright 0x0a shift
+plusminus 0x0a shift altgr
+equal 0x0b shift
+degree 0x0b shift altgr
+apostrophe 0x0c
+question 0x0c shift
+exclamdown 0x0d
+questiondown 0x0d shift
+Greek_OMEGA 0x10 shift altgr
+lstroke 0x11 altgr
+Lstroke 0x11 shift altgr
+EuroSign 0x12 altgr
+paragraph 0x13 altgr
+registered 0x13 shift altgr
+tslash 0x14 altgr
+Tslash 0x14 shift altgr
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oslash 0x18 altgr
+Ooblique 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+dead_grave 0x1a
+dead_circumflex 0x1a shift
+bracketleft 0x1a altgr
+dead_abovering 0x1a shift altgr
+plus 0x1b
+asterisk 0x1b shift
+bracketright 0x1b altgr
+dead_macron 0x1b shift altgr
+ae 0x1e altgr
+AE 0x1e shift altgr
+ssharp 0x1f altgr
+section 0x1f shift altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+dstroke 0x21 altgr
+eng 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+kra 0x25 altgr
+lstroke 0x26 altgr
+Lstroke 0x26 shift altgr
+ntilde 0x27
+Ntilde 0x27 shift
+dead_doubleacute 0x27 shift altgr
+dead_acute 0x28
+dead_diaeresis 0x28 shift
+braceleft 0x28 altgr
+masculine 0x29
+ordfeminine 0x29 shift
+backslash 0x29 altgr
+ccedilla 0x2b
+Ccedilla 0x2b shift
+braceright 0x2b altgr
+dead_breve 0x2b shift altgr
+guillemotleft 0x2c altgr
+less 0x56
+greater 0x56 shift
+guillemotright 0x2d altgr
+cent 0x2e altgr
+copyright 0x2e shift altgr
+leftdoublequotemark 0x2f altgr
+grave 0x2f shift altgr
+rightdoublequotemark 0x30 altgr
+mu 0x32 altgr
+comma 0x33
+semicolon 0x33 shift
+horizconnector 0x33 altgr
+multiply 0x33 shift altgr
+period 0x34
+colon 0x34 shift
+division 0x34 shift altgr
+minus 0x35
+underscore 0x35 shift
+dead_belowdot 0x35 altgr
+dead_abovedot 0x35 shift altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/et
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/et	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/et	(revision 901)
@@ -0,0 +1,86 @@
+map 0x00000425
+include common
+
+#
+# Top row
+#
+dead_caron 0x29
+dead_tilde 0x29 shift
+
+# 1
+exclam 0x2 shift
+
+# 2
+quotedbl 0x3 shift
+at 0x3 altgr
+
+# 3
+numbersign 0x4 shift
+sterling 0x4 altgr
+# 4
+currency 0x5 shift
+dollar 0x5 altgr
+# 5
+percent 0x6 shift
+# 6
+ampersand 0x7 shift
+# 7
+slash 0x8 shift
+braceleft 0x8 altgr
+# 8
+parenleft 0x9 shift
+bracketleft 0x9 altgr
+# 9
+parenright 0xa shift
+bracketright 0xa altgr
+# 0
+equal 0xb shift
+braceright 0xb altgr
+
+plus 0xc
+question 0xc shift
+backslash 0xc altgr
+
+acute 0xd
+dead_acute 0xd
+grave 0xd shift
+dead_grave 0xd shift
+
+#
+# QWERTY first row
+#
+EuroSign 0x12 altgr
+udiaeresis 0x1a 
+Udiaeresis 0x1a shift
+otilde 0x1b 
+Otilde 0x1b shift
+section 0x1b altgr
+
+#
+# QWERTY second row
+#
+scaron 0x1f altgr
+Scaron 0x1f altgr shift
+odiaeresis 0x27 
+Odiaeresis 0x27 shift
+adiaeresis 0x28 
+Adiaeresis 0x28 shift
+asciicircum 0x28 altgr
+apostrophe 0x2b
+asterisk 0x2b shift
+onehalf 0x2b altgr
+#
+# QWERTY third row
+#
+less 0x56 
+greater 0x56 shift
+bar 0x56 altgr
+zcaron 0x2c altgr
+Zcaron 0x2c altgr shift
+comma 0x33
+semicolon 0x33 shift
+period 0x34
+colon 0x34 shift
+minus 0x35
+underscore 0x35 shift
+
Index: /trunk/autoquest-misc/src/main/resources/keymaps/fi
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/fi	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/fi	(revision 901)
@@ -0,0 +1,122 @@
+# Finnish keyboard layout
+# Originally generated from XKB map se_FI (wrong!), modified afterwards.
+
+include common
+map 0x40b
+
+exclam 0x02 shift
+exclamdown 0x02 altgr
+onesuperior 0x02 shift altgr
+quotedbl 0x03 shift
+at 0x03 altgr
+twosuperior 0x03 shift altgr
+numbersign 0x04 shift
+sterling 0x04 altgr
+threesuperior 0x04 shift altgr
+currency 0x05 shift
+dollar 0x05 altgr
+onequarter 0x05 shift altgr
+percent 0x06 shift
+onehalf 0x06 altgr
+cent 0x06 shift altgr
+ampersand 0x07 shift
+yen 0x07 altgr
+fiveeighths 0x07 shift altgr
+slash 0x08 shift
+braceleft 0x08 altgr
+division 0x08 shift altgr
+parenleft 0x09 shift
+bracketleft 0x09 altgr
+guillemotleft 0x09 shift altgr
+parenright 0x0a shift
+bracketright 0x0a altgr
+guillemotright 0x0a shift altgr
+equal 0x0b shift
+braceright 0x0b altgr
+degree 0x0b shift altgr
+plus 0x0c
+question 0x0c shift
+backslash 0x0c altgr
+questiondown 0x0c shift altgr
+dead_acute 0x0d
+dead_grave 0x0d shift
+plusminus 0x0d altgr
+notsign 0x0d shift altgr
+Greek_OMEGA 0x10 shift altgr
+lstroke 0x11 altgr
+Lstroke 0x11 shift altgr
+EuroSign 0x12 altgr
+cent 0x12 shift altgr
+registered 0x13 altgr
+thorn 0x14 altgr
+THORN 0x14 shift altgr
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oe 0x18 altgr
+OE 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+aring 0x1a
+Aring 0x1a shift
+dead_diaeresis 0x1a altgr
+dead_abovering 0x1a shift altgr
+dead_diaeresis 0x1b
+dead_circumflex 0x1b shift
+dead_tilde 0x1b altgr
+dead_caron 0x1b shift altgr
+ordfeminine 0x1e altgr
+masculine 0x1e shift altgr
+ssharp 0x1f altgr
+section 0x1f shift altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+dstroke 0x21 altgr
+ordfeminine 0x21 shift altgr
+eng 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+kra 0x25 altgr
+lstroke 0x26 altgr
+Lstroke 0x26 shift altgr
+odiaeresis 0x27
+Odiaeresis 0x27 shift
+oslash 0x27 altgr
+Ooblique 0x27 shift altgr
+adiaeresis 0x28
+Adiaeresis 0x28 shift
+ae 0x28 altgr
+AE 0x28 shift altgr
+section 0x29
+onehalf 0x29 shift
+paragraph 0x29 altgr
+threequarters 0x29 shift altgr
+apostrophe 0x2b
+asterisk 0x2b shift
+acute 0x2b altgr
+multiply 0x2b shift altgr
+guillemotleft 0x2c altgr
+guillemotright 0x2d altgr
+copyright 0x2e altgr
+leftdoublequotemark 0x2f altgr
+grave 0x2f shift altgr
+rightdoublequotemark 0x30 altgr
+mu 0x32 altgr
+masculine 0x32 shift altgr
+comma 0x33
+semicolon 0x33 shift
+dead_cedilla 0x33 altgr
+dead_ogonek 0x33 shift altgr
+period 0x34
+colon 0x34 shift
+periodcentered 0x34 altgr
+dead_abovedot 0x34 shift altgr
+minus 0x35
+underscore 0x35 shift
+hyphen 0x35 altgr
+macron 0x35 shift altgr
+nobreakspace 0x39 altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/fo
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/fo	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/fo	(revision 901)
@@ -0,0 +1,77 @@
+map 0x438
+include common
+
+#
+# Top row
+#
+onehalf 0x29
+section 0x29 shift
+
+# 1
+exclam 0x2 shift
+
+# 2
+quotedbl 0x3 shift
+at 0x3 altgr
+
+# 3
+numbersign 0x4 shift
+sterling 0x4 altgr
+# 4
+currency 0x5 shift
+dollar 0x5 altgr
+# 5
+percent 0x6 shift
+# 6
+ampersand 0x7 shift
+# 7
+slash 0x8 shift
+braceleft 0x8 altgr
+# 8
+parenleft 0x9 shift
+bracketleft 0x9 altgr
+# 9
+parenright 0xa shift
+bracketright 0xa altgr
+# 0
+equal 0xb shift
+braceright 0xb altgr
+
+plus 0xc
+question 0xc shift
+plusminus 0xc altgr
+
+bar 0xd altgr
+dead_acute 0xd
+
+#
+# QWERTY first row
+#
+EuroSign 0x12 altgr
+aring 0x1a
+Aring 0x1a shift
+eth 0x1b addupper
+asciitilde 0x1b altgr
+
+#
+# QWERTY second row
+#
+ae 0x27 addupper
+oslash 0x28
+Ooblique 0x28 shift
+apostrophe 0x2b
+asterisk 0x2b shift
+
+#
+# QWERTY third row
+#
+less 0x56
+greater 0x56 shift
+backslash 0x56 altgr
+comma 0x33
+semicolon 0x33 shift
+period 0x34
+colon 0x34 shift
+minus 0x35
+underscore 0x35 shift
+
Index: /trunk/autoquest-misc/src/main/resources/keymaps/fr
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/fr	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/fr	(revision 901)
@@ -0,0 +1,181 @@
+include common
+map 0x40c
+#
+# Top row
+#
+twosuperior 0x29
+notsign 0x29 altgr
+
+ampersand 0x02
+1 0x02 shift
+onesuperior 0x02 altgr
+exclamdown 0x02 shift altgr
+
+eacute 0x03
+2 0x03 shift
+asciitilde 0x03 altgr
+oneeighth 0x03 shift altgr
+
+quotedbl 0x04
+3 0x04 shift
+numbersign 0x04 altgr
+
+apostrophe 0x05
+4 0x05 shift
+braceleft 0x05 altgr
+
+parenleft 0x06
+5 0x06 shift
+bracketleft 0x06 altgr
+threeeighths 0x06 shift altgr
+
+minus 0x07
+6 0x07 shift
+bar 0x07 altgr
+fiveeighths 0x07 shift altgr
+
+egrave 0x08
+7 0x08 shift
+grave 0x08 altgr
+seveneighths 0x08 shift altgr
+
+underscore 0x09
+8 0x09 shift
+backslash 0x09 altgr
+trademark 0x09 shift altgr
+
+ccedilla 0x0a
+9 0x0a shift
+asciicircum 0x0a altgr
+plusminus 0x0a shift altgr
+
+agrave 0x0b
+0 0x0b shift
+at 0x0b altgr
+
+parenright 0x0c
+degree 0x0c shift
+bracketright 0x0c altgr
+questiondown 0x0c shift altgr
+
+equal 0x0d
+plus 0x0d shift
+braceright 0x0d altgr
+dead_ogonek 0x0d shift altgr
+
+#
+# AZERTY first row
+#
+
+a 0x10 addupper
+ae 0x10 altgr
+AE 0x10 shift altgr
+
+z 0x11 addupper
+guillemotleft 0x11 altgr
+
+EuroSign 0x12 altgr
+
+paragraph 0x13 altgr
+registered 0x13 shift altgr
+
+tslash 0x14 altgr
+Tslash 0x14 shift altgr
+
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+
+oslash 0x18 altgr
+Ooblique 0x18 shift altgr
+
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+
+dead_circumflex 0x1a 
+dead_diaeresis 0x1a shift
+dead_abovering 0x1a shift altgr
+
+dollar 0x1b
+sterling 0x1b shift
+currency 0x1b altgr
+dead_macron 0x1b shift altgr
+
+#
+# AZERTY second row
+#
+q 0x1e addupper
+Greek_OMEGA 0x1e shift altgr
+
+ssharp 0x1f altgr
+
+eth 0x20 altgr
+ETH 0x20 shift altgr
+
+dstroke 0x21 altgr
+ordfeminine 0x21 shift altgr
+
+eng 0x22 altgr
+ENG 0x22 shift altgr
+
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+
+kra 0x25 altgr
+
+lstroke 0x26 altgr
+Lstroke 0x26 shift altgr
+
+m 0x27 addupper
+masculine 0x27 shift altgr
+
+ugrave 0x28
+percent 0x28 shift
+dead_caron 0x28 shift altgr
+
+asterisk 0x2b
+mu 0x2b shift
+dead_grave 0x2b altgr
+dead_breve 0x2b shift altgr
+
+#
+# AZERTY third row
+#
+less 0x56
+greater 0x56 shift
+
+w 0x2c addupper
+
+guillemotright 0x2d altgr
+
+cent 0x2e altgr
+copyright 0x2e shift altgr
+
+leftdoublequotemark 0x2f altgr
+
+rightdoublequotemark 0x30 altgr
+
+comma 0x32
+question 0x32 shift
+dead_acute 0x32 altgr
+dead_doubleacute 0x32 shift altgr
+
+semicolon 0x33
+period 0x33 shift
+horizconnector 0x33 altgr
+multiply 0x33 shift altgr
+
+colon 0x34
+slash 0x34 shift
+periodcentered 0x34 altgr
+division 0x34 shift altgr
+
+exclam 0x35
+section 0x35 shift
+dead_belowdot 0x35 altgr
+dead_abovedot 0x35 shift altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/fr-be
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/fr-be	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/fr-be	(revision 901)
@@ -0,0 +1,135 @@
+# generated from XKB map be
+include common
+map 0x80c
+ampersand 0x02
+1 0x02 shift
+bar 0x02 altgr
+exclamdown 0x02 shift altgr
+eacute 0x03
+2 0x03 shift
+at 0x03 altgr
+oneeighth 0x03 shift altgr
+quotedbl 0x04
+3 0x04 shift
+numbersign 0x04 altgr
+sterling 0x04 shift altgr
+apostrophe 0x05
+4 0x05 shift
+onequarter 0x05 altgr
+dollar 0x05 shift altgr
+parenleft 0x06
+5 0x06 shift
+onehalf 0x06 altgr
+threeeighths 0x06 shift altgr
+section 0x07
+6 0x07 shift
+asciicircum 0x07 altgr
+fiveeighths 0x07 shift altgr
+egrave 0x08
+7 0x08 shift
+braceleft 0x08 altgr
+seveneighths 0x08 shift altgr
+exclam 0x09
+8 0x09 shift
+bracketleft 0x09 altgr
+trademark 0x09 shift altgr
+ccedilla 0x0a
+9 0x0a shift
+braceleft 0x0a altgr
+plusminus 0x0a shift altgr
+agrave 0x0b
+0 0x0b shift
+braceright 0x0b altgr
+degree 0x0b shift altgr
+parenright 0x0c
+degree 0x0c shift
+backslash 0x0c altgr
+questiondown 0x0c shift altgr
+minus 0x0d
+underscore 0x0d shift
+dead_cedilla 0x0d altgr
+dead_ogonek 0x0d shift altgr
+a 0x10 addupper
+Greek_OMEGA 0x10 shift altgr
+z 0x11 addupper
+lstroke 0x11 altgr
+Lstroke 0x11 shift altgr
+EuroSign 0x12 altgr
+cent 0x12 shift altgr
+paragraph 0x13 altgr
+registered 0x13 shift altgr
+tslash 0x14 altgr
+Tslash 0x14 shift altgr
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oslash 0x18 altgr
+Ooblique 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+dead_circumflex 0x1a
+dead_diaeresis 0x1a shift
+bracketleft 0x1a altgr
+dead_abovering 0x1a shift altgr
+dollar 0x1b
+asterisk 0x1b shift
+bracketright 0x1b altgr
+dead_macron 0x1b shift altgr
+q 0x1e addupper
+ae 0x1e altgr
+AE 0x1e shift altgr
+ssharp 0x1f altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+dstroke 0x21 altgr
+ordfeminine 0x21 shift altgr
+eng 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+kra 0x25 altgr
+lstroke 0x26 altgr
+Lstroke 0x26 shift altgr
+m 0x27 addupper
+dead_acute 0x27 altgr
+dead_doubleacute 0x27 shift altgr
+ugrave 0x28
+percent 0x28 shift
+dead_acute 0x28 altgr
+dead_caron 0x28 shift altgr
+twosuperior 0x29
+threesuperior 0x29 shift
+notsign 0x29 altgr
+mu 0x2b
+sterling 0x2b shift
+dead_grave 0x2b altgr
+dead_breve 0x2b shift altgr
+w 0x2c addupper
+guillemotleft 0x2c altgr
+guillemotright 0x2d altgr
+cent 0x2e altgr
+copyright 0x2e shift altgr
+leftdoublequotemark 0x2f altgr
+grave 0x2f shift altgr
+rightdoublequotemark 0x30 altgr
+comma 0x32
+question 0x32 shift
+dead_cedilla 0x32 altgr
+masculine 0x32 shift altgr
+semicolon 0x33
+period 0x33 shift
+horizconnector 0x33 altgr
+multiply 0x33 shift altgr
+colon 0x34
+slash 0x34 shift
+periodcentered 0x34 altgr
+division 0x34 shift altgr
+equal 0x35
+plus 0x35 shift
+dead_tilde 0x35 altgr
+dead_abovedot 0x35 shift altgr
+backslash 0x56 altgr
+
Index: /trunk/autoquest-misc/src/main/resources/keymaps/fr-ca
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/fr-ca	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/fr-ca	(revision 901)
@@ -0,0 +1,53 @@
+# Canadian French
+# By Simon Germain
+include common
+map 0xc0c
+
+backslash 0x29 altgr
+plusminus 0x2 altgr
+at 0x3 altgr
+sterling 0x4 altgr
+cent 0x5 altgr
+currency 0x6 altgr
+notsign 0x7 altgr
+bar 0x29 shift
+twosuperior 0x9 altgr
+threesuperior 0xa altgr
+onequarter 0xb altgr
+onehalf 0xc altgr
+threequarters 0xd altgr
+section 0x18 altgr
+paragraph 0x19 altgr
+bracketleft 0x1a altgr
+bracketright 0x1b altgr
+asciitilde 0x27 altgr
+braceleft 0x28 altgr
+braceright 0x2b altgr
+less 0x2b
+greater 0x2b shift
+guillemotleft 0x56
+guillemotright 0x56 shift
+degree 0x56 altgr
+mu 0x32 altgr
+eacute 0x35
+dead_acute 0x35 altgr
+dead_grave 0x28
+dead_circumflex 0x1a
+dead_circumflex 0x1a shift
+dead_cedilla 0x1b
+dead_diaeresis 0x1b shift
+exclam 0x2 shift
+quotedbl 0x3 shift
+comma 0x33
+apostrophe 0x33 shift
+period 0x34 shift
+slash 0x4 shift
+dollar 0x5 shift
+percent 0x6 shift
+question 0x7 shift
+ampersand 0x8 shift
+asterisk 0x9 shift
+parenleft 0xa shift
+parenright 0xb shift
+underscore 0xc shift
+plus 0xd shift
Index: /trunk/autoquest-misc/src/main/resources/keymaps/fr-ch
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/fr-ch	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/fr-ch	(revision 901)
@@ -0,0 +1,169 @@
+# rdesktop suisse-french keymap file 
+#
+#map 0x00000807
+map 0x0000100C
+include common
+#
+# Scan Code 1
+section 0x29
+degree 0x29 shift
+notsign 0x29 altgr inhibit
+#
+# Scan Code 2
+plus 0x2 shift
+brokenbar 0x02 altgr
+#
+# Scan Code 3
+quotedbl 0x03 shift
+at 0x03 altgr
+#
+# Scan Code 4
+asterisk 0x04 shift
+numbersign 0x04 altgr
+#
+# Scan Code 5
+ccedilla 0x05 shift
+onequarter 0x05 altgr inhibit
+#
+# Scan Code 6
+percent 0x06 shift
+onehalf 0x06 altgr inhibit
+#
+# Scan Code 7
+ampersand 0x07 shift
+notsign 0x07 altgr
+#
+# Scan Code 8
+slash 0x08 shift
+bar 0x08 altgr
+#
+# Scan Code 9
+parenleft 0x09 shift
+cent 0x09 altgr
+# 
+# Scan Code 10
+parenright 0x0a shift
+#
+# Scan Code 11
+equal 0x0b shift
+braceright 0x0b altgr inhibit
+#
+# Scan Code 12
+apostrophe 0x0c 
+question 0x0c shift
+dead_acute 0x0c altgr
+#
+# Scan Code 13
+dead_circumflex 0x0d
+dead_grave 0x0d shift
+dead_tilde 0x0d altgr
+#
+# Scan Code 19
+EuroSign 0x12 altgr
+#
+# Scan Code 22
+z 0x15 addupper
+#
+# Scan Code 27
+udiaeresis 0x1a shift
+egrave 0x1a 
+bracketleft 0x1a altgr
+# 
+# Scan Code 28
+dead_diaeresis 0x1b
+exclam 0x1b shift 
+bracketright 0x1b altgr
+#
+# Scan Code 40
+odiaeresis 0x27 shift
+eacute 0x27 
+#
+# Scan Code 41
+adiaeresis 0x28 shift
+agrave 0x28 
+braceleft 0x28 altgr
+#
+# Scan Code 42 (only on international keyboards)
+dollar 0x2b
+sterling 0x2b shift
+braceright 0x2b altgr
+#
+# Scan Code 45 (only on international keyboards)
+backslash 0x56 altgr
+#
+# Scan Code 46
+y 0x2c addupper
+# 
+# Scan Code 53
+comma 0x33
+semicolon 0x33 shift
+# 
+# Scan Code 54
+period 0x34
+colon 0x34 shift
+#
+# Scan Code 55
+minus 0x35 
+underscore 0x35 shift
+#
+# Suppress Windows unsupported AltGr keys
+#
+# Scan Code 17
+paragraph 0x10 altgr inhibit
+#
+# Scan Code 21
+tslash 0x14 altgr inhibit
+#
+# Scan Code 22
+leftarrow 0x15 altgr inhibit
+#
+# Scan Code 23
+downarrow 0x16 altgr inhibit
+#
+# Scan Code 24
+rightarrow 0x17 altgr inhibit
+#
+# Scan Code 25
+oslash 0x18 altgr inhibit
+#
+# Scan Code 26
+thorn 0x19 altgr inhibit
+#
+# Scan Code 31
+ae 0x1e altgr inhibit
+#
+# Scan Code 32
+ssharp 0x1f altgr inhibit
+#
+# Scan Code 33
+eth 0x20 altgr inhibit
+#
+# Scan Code 34
+dstroke 0x21 altgr inhibit
+#
+# Scan Code 35
+eng 0x22 altgr inhibit
+#
+# Scan Code 36
+hstroke 0x23 altgr inhibit
+#
+# Scan Code 38
+kra 0x25 altgr inhibit
+#
+# Scan Code 39
+lstroke 0x26 altgr inhibit
+#
+# Scan Code 46
+guillemotleft 0x2c altgr inhibit
+#
+# Scan Code 47
+guillemotright 0x2d altgr inhibit
+#
+# Scan Code 49
+leftdoublequotemark 0x2f altgr inhibit
+#
+# Scan Code 50
+rightdoublequotemark 0x30 altgr inhibit
+#
+# Scan Code 52
+mu 0x32 altgr inhibit
Index: /trunk/autoquest-misc/src/main/resources/keymaps/he
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/he	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/he	(revision 901)
@@ -0,0 +1,91 @@
+# Generated by Shlomil
+# Please send your comments and corrections to <shlomister@gmail.com>
+include common
+map 0x040D
+
+
+#
+# Top row
+#
+
+slash 0x10 altgr
+apostrophe 0x11 altgr
+hebrew_qoph 0x12 altgr
+hebrew_resh 0x13 altgr
+hebrew_aleph 0x14 altgr
+hebrew_tet 0x15 altgr
+hebrew_waw 0x16 altgr
+hebrew_finalnun 0x17 altgr
+hebrew_finalmem 0x18 altgr
+hebrew_pe 0x19 altgr
+
+#
+# Second row
+#
+
+hebrew_shin 0x1e altgr
+hebrew_dalet 0x1f altgr
+hebrew_gimel 0x20 altgr
+hebrew_kaph 0x21 altgr
+hebrew_ayin 0x22 altgr
+hebrew_yod 0x23 altgr
+hebrew_chet 0x24 altgr
+hebrew_lamed 0x25 altgr
+hebrew_finalkaph 0x26 altgr
+hebrew_finalpe 0x27 altgr
+comma 0x28 altgr
+
+#
+# Third row
+#
+
+hebrew_zain 0x2c altgr
+hebrew_samech 0x2d altgr
+hebrew_bet 0x2e altgr
+hebrew_he 0x2f altgr
+hebrew_nun 0x30 altgr
+hebrew_mem 0x31 altgr
+hebrew_zade 0x32 altgr
+
+hebrew_taw 0x33 altgr
+hebrew_finalzade 0x34 altgr
+period 0x35 altgr
+
+
+#
+# en-us
+#
+
+
+exclam 0x02 shift
+at 0x03 shift
+numbersign 0x04 shift
+dollar 0x05 shift
+percent 0x06 shift
+asciicircum 0x07 shift
+ampersand 0x08 shift
+asterisk 0x09 shift
+parenleft 0x0a shift
+parenright 0x0b shift
+minus 0x0c
+underscore 0x0c shift
+equal 0x0d
+plus 0x0d shift
+bracketleft 0x1a
+braceleft 0x1a shift
+bracketright 0x1b
+braceright 0x1b shift
+semicolon 0x27
+colon 0x27 shift
+apostrophe 0x28
+quotedbl 0x28 shift
+grave 0x29
+asciitilde 0x29 shift
+backslash 0x2b
+bar 0x2b shift
+comma 0x33
+less 0x33 shift
+period 0x34
+greater 0x34 shift
+slash 0x35
+question 0x35 shift
Index: /trunk/autoquest-misc/src/main/resources/keymaps/hr
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/hr	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/hr	(revision 901)
@@ -0,0 +1,125 @@
+# generated from XKB map hr
+include common
+map 0x41a
+exclam 0x02 shift
+asciitilde 0x02 altgr
+dead_tilde 0x02 shift altgr
+quotedbl 0x03 shift
+dead_caron 0x03 altgr
+caron 0x03 shift altgr
+numbersign 0x04 shift
+asciicircum 0x04 altgr
+dead_circumflex 0x04 shift altgr
+dollar 0x05 shift
+dead_breve 0x05 altgr
+breve 0x05 shift altgr
+percent 0x06 shift
+degree 0x06 altgr
+dead_abovering 0x06 shift altgr
+ampersand 0x07 shift
+dead_ogonek 0x07 altgr
+ogonek 0x07 shift altgr
+slash 0x08 shift
+grave 0x08 altgr
+dead_grave 0x08 shift altgr
+parenleft 0x09 shift
+dead_abovedot 0x09 altgr
+abovedot 0x09 shift altgr
+parenright 0x0a shift
+dead_acute 0x0a altgr
+apostrophe 0x0a shift altgr
+equal 0x0b shift
+dead_doubleacute 0x0b altgr
+doubleacute 0x0b shift altgr
+apostrophe 0x0c
+question 0x0c shift
+dead_diaeresis 0x0c altgr
+diaeresis 0x0c shift altgr
+plus 0x0d
+asterisk 0x0d shift
+dead_cedilla 0x0d altgr
+cedilla 0x0d shift altgr
+backslash 0x10 altgr
+Greek_OMEGA 0x10 shift altgr
+bar 0x11 altgr
+Lstroke 0x11 shift altgr
+EuroSign 0x12 altgr
+paragraph 0x13 altgr
+registered 0x13 shift altgr
+tslash 0x14 altgr
+Tslash 0x14 shift altgr
+z 0x15 addupper
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oslash 0x18 altgr
+Ooblique 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+scaron 0x1a
+Scaron 0x1a shift
+division 0x1a altgr
+dead_abovering 0x1a shift altgr
+dstroke 0x1b
+Dstroke 0x1b shift
+multiply 0x1b altgr
+dead_macron 0x1b shift altgr
+ae 0x1e altgr
+AE 0x1e shift altgr
+ssharp 0x1f altgr
+section 0x1f shift altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+bracketleft 0x21 altgr
+ordfeminine 0x21 shift altgr
+bracketright 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+lstroke 0x25 altgr
+ampersand 0x25 shift altgr
+Lstroke 0x26 altgr
+ccaron 0x27
+Ccaron 0x27 shift
+dead_acute 0x27 altgr
+dead_doubleacute 0x27 shift altgr
+cacute 0x28
+Cacute 0x28 shift
+ssharp 0x28 altgr
+dead_caron 0x28 shift altgr
+dead_cedilla 0x29
+dead_diaeresis 0x29 shift
+notsign 0x29 altgr
+zcaron 0x2b
+Zcaron 0x2b shift
+currency 0x2b altgr
+dead_breve 0x2b shift altgr
+y 0x2c addupper
+guillemotleft 0x2c altgr
+less 0x2c shift altgr
+guillemotright 0x2d altgr
+greater 0x2d shift altgr
+cent 0x2e altgr
+copyright 0x2e shift altgr
+at 0x2f altgr
+grave 0x2f shift altgr
+braceleft 0x30 altgr
+apostrophe 0x30 shift altgr
+braceright 0x31 altgr
+section 0x32 altgr
+masculine 0x32 shift altgr
+comma 0x33
+semicolon 0x33 shift
+horizconnector 0x33 altgr
+multiply 0x33 shift altgr
+period 0x34
+colon 0x34 shift
+periodcentered 0x34 altgr
+division 0x34 shift altgr
+minus 0x35
+underscore 0x35 shift
+dead_belowdot 0x35 altgr
+dead_abovedot 0x35 shift altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/hu
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/hu	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/hu	(revision 901)
@@ -0,0 +1,115 @@
+# Hungarian keyboard layout (QWERTZ)
+# Created by: The NeverGone <never@delfin.klte.hu>
+
+include common
+map 0x40e
+
+
+# AltGr keys:
+notsign 0x29 altgr
+asciitilde 0x02 altgr
+caron 0x03 altgr
+asciicircum 0x04 altgr
+breve 0x05 altgr
+degree 0x06 altgr
+ogonek 0x07 altgr
+grave 0x08 altgr
+abovedot 0x09 altgr
+acute 0x0a altgr
+doubleacute 0x0b altgr
+diaeresis 0x0c altgr
+cedilla 0x0d altgr
+backslash 0x10 altgr
+bar 0x11 altgr
+EuroSign 0x12 altgr
+Iacute 0x17 altgr
+division 0x1a altgr
+multiply 0x1b altgr
+dstroke 0x1f altgr
+Dstroke 0x20 altgr
+bracketleft 0x21 altgr
+bracketright 0x22 altgr
+iacute 0x24 altgr
+lstroke 0x25 altgr
+Lstroke 0x26 altgr
+dollar 0x27 altgr
+ssharp 0x28 altgr
+currency 0x2b altgr
+less 0x56 altgr
+greater 0x2c altgr
+numbersign 0x2d altgr
+ampersand 0x2e altgr
+at 0x2f altgr
+braceleft 0x30 altgr
+braceright 0x31 altgr
+semicolon 0x33 altgr
+asterisk 0x35 altgr
+
+
+# Shift keys:
+section 0x29 shift
+apostrophe 0x02 shift
+quotedbl 0x03 shift
+plus 0x04 shift
+exclam 0x05 shift
+percent 0x06 shift
+slash 0x07 shift
+equal 0x08 shift
+parenleft 0x09 shift
+parenright 0x0a shift
+Odiaeresis 0x0b shift
+Udiaeresis 0x0c shift
+Oacute 0x0d shift
+Z 0x15 shift
+Odoubleacute 0x1a shift
+Uacute 0x1b shift
+Eacute 0x27 shift
+Aacute 0x28 shift
+Udoubleacute 0x2b shift
+Y 0x2c shift
+question 0x33 shift
+colon 0x34 shift
+underscore 0x35 shift
+F13 0x3b shift
+F14 0x3c shift
+F15 0x3d shift
+F16 0x3e shift
+F17 0x3f shift
+F18 0x40 shift
+F19 0x41 shift
+F20 0x42 shift
+F21 0x43 shift
+F22 0x44 shift
+F23 0x57 shift
+F24 0x58 shift
+
+
+# Ctrl keys:
+F25 0x3b ctrl
+F26 0x3c ctrl
+F27 0x3d ctrl
+F28 0x3e ctrl
+F29 0x3f ctrl
+F30 0x40 ctrl
+F31 0x41 ctrl
+F32 0x42 ctrl
+F33 0x43 ctrl
+F34 0x44 ctrl
+F35 0x57 ctrl
+#NoSymbol 0x58 ctrl
+
+
+0 0x29
+odiaeresis 0x0b
+udiaeresis 0x0c
+oacute 0x0d
+z 0x15
+odoubleacute 0x1a
+uacute 0x1b
+eacute 0x27
+aacute 0x28
+udoubleacute 0x2b
+y 0x2c
+comma 0x33
+period 0x34
+minus 0x35
Index: /trunk/autoquest-misc/src/main/resources/keymaps/is
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/is	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/is	(revision 901)
@@ -0,0 +1,140 @@
+# 2004-03-16 Halldór Guðmundsson and Morten Lange 
+# Keyboard definition file for the Icelandic keyboard
+# to be used in rdesktop 1.3.x ( See rdesktop.org) 
+# generated from XKB map de, and changed manually
+# Location for example /usr/local/share/rdesktop/keymaps/is
+include common
+map 0x40f
+exclam 0x02 shift
+onesuperior 0x02 altgr
+exclamdown 0x02 shift altgr
+quotedbl 0x03 shift
+twosuperior 0x03 altgr
+oneeighth 0x03 shift altgr
+#section 0x04 shift
+numbersign 0x04 shift
+threesuperior 0x04 altgr
+sterling 0x04 shift altgr
+dollar 0x05 shift
+onequarter 0x05 altgr
+currency 0x05 shift altgr
+percent 0x06 shift
+onehalf 0x06 altgr
+threeeighths 0x06 shift altgr
+ampersand 0x07 shift
+threequarters 0x07 altgr
+fiveeighths 0x07 shift altgr
+slash 0x08 shift
+braceleft 0x08 altgr
+seveneighths 0x08 shift altgr
+parenleft 0x09 shift
+bracketleft 0x09 altgr
+trademark 0x09 shift altgr
+parenright 0x0a shift
+bracketright 0x0a altgr
+plusminus 0x0a shift altgr
+equal 0x0b shift
+braceright 0x0b altgr
+#ssharp 0x0c
+odiaeresis 0x0c
+#question 0x0c shift
+Odiaeresis 0x0c shift
+backslash 0x0c altgr
+questiondown 0x0c shift altgr
+#acute 0x0d
+minus  0x0d
+#dead_acute 0x0d
+#grave 0x0d shift
+#dead_grave 0x0d shift
+underscore 0x0d shift
+dead_cedilla 0x0d altgr
+dead_ogonek 0x0d shift altgr
+at 0x10 altgr
+Greek_OMEGA 0x10 shift altgr
+EuroSign 0x12 altgr
+paragraph 0x13 altgr
+registered 0x13 shift altgr
+tslash 0x14 altgr
+Tslash 0x14 shift altgr
+#z 0x15 addupper
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oslash 0x18 altgr
+Ooblique 0x18 shift altgr
+#thorn 0x19 altgr
+#THORN 0x19 shift altgr
+#udiaeresis 0x1a
+#Udiaeresis 0x1a shift
+#dead_diaeresis 0x1a altgr
+#dead_abovering 0x1a shift altgr
+eth 0x1a 
+ETH 0x1a shift 
+apostrophe 0x1b
+question 0x1b shift
+#plus 0x1b
+#asterisk 0x1b shift
+asciitilde 0x1b altgr
+#grave 0x1b altgr
+#dead_tilde 0x1b altgr
+#dead_macron 0x1b shift altgr
+#ae 0x1e altgr
+#AE 0x1e shift altgr
+#eth 0x20 altgr
+#eth 0x20 
+#ETH 0x20 shift altgr
+#ETH 0x20 shift 
+dstroke 0x21 altgr
+ordfeminine 0x21 shift altgr
+eng 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+kra 0x25 altgr
+#adiaeresis 0x27
+#Adiaeresis 0x27 shift
+ae 0x27 
+AE 0x27 shift 
+dead_doubleacute 0x27 altgr
+#adiaeresis 0x28
+#Adiaeresis 0x28 shift
+#dead_caron 0x28 shift altgr
+#asciicircum 0x29
+acute  0x28
+dead_acute 0x28
+#dead_circumflex 0x29
+#degree 0x29 shift
+#notsign 0x29 altgr
+plus 0x2b
+asterisk 0x2b shift
+grave 0x2b altgr
+#numbersign 0x2b
+#apostrophe 0x2b shift
+#dead_breve 0x2b shift altgr
+#y 0x2c addupper
+guillemotleft 0x2c altgr
+guillemotright 0x2d altgr
+cent 0x2e altgr
+copyright 0x2e shift altgr
+leftdoublequotemark 0x2f altgr
+rightdoublequotemark 0x30 altgr
+mu 0x32 altgr
+masculine 0x32 shift altgr
+comma 0x33
+semicolon 0x33 shift
+horizconnector 0x33 altgr
+multiply 0x33 shift altgr
+period 0x34
+colon 0x34 shift
+periodcentered 0x34 altgr
+division 0x34 shift altgr
+#minus 0x35
+#underscore 0x35 shift
+thorn 0x35 
+THORN 0x35 shift 
+dead_belowdot 0x35 altgr
+dead_abovedot 0x35 shift altgr
+
Index: /trunk/autoquest-misc/src/main/resources/keymaps/it
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/it	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/it	(revision 901)
@@ -0,0 +1,115 @@
+# generated from XKB map it
+include common
+map 0x410
+exclam 0x02 shift
+onesuperior 0x02 altgr
+exclamdown 0x02 shift altgr
+quotedbl 0x03 shift
+twosuperior 0x03 altgr
+oneeighth 0x03 shift altgr
+sterling 0x04 shift
+threesuperior 0x04 altgr
+dollar 0x05 shift
+onequarter 0x05 altgr
+percent 0x06 shift
+onehalf 0x06 altgr
+threeeighths 0x06 shift altgr
+ampersand 0x07 shift
+threequarters 0x07 altgr
+fiveeighths 0x07 shift altgr
+slash 0x08 shift
+braceleft 0x08 altgr
+seveneighths 0x08 shift altgr
+parenleft 0x09 shift
+trademark 0x09 shift altgr
+parenright 0x0a shift
+plusminus 0x0a shift altgr
+equal 0x0b shift
+braceright 0x0b altgr
+degree 0x0b shift altgr
+apostrophe 0x0c
+question 0x0c shift
+grave 0x0c altgr
+questiondown 0x0c shift altgr
+igrave 0x0d
+asciicircum 0x0d shift
+asciitilde 0x0d altgr
+dead_ogonek 0x0d shift altgr
+at 0x10 altgr
+Greek_OMEGA 0x10 shift altgr
+lstroke 0x11 altgr
+Lstroke 0x11 shift altgr
+EuroSign 0x12 altgr
+cent 0x12 shift altgr
+paragraph 0x13 altgr
+registered 0x13 shift altgr
+tslash 0x14 altgr
+Tslash 0x14 shift altgr
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oslash 0x18 altgr
+Ooblique 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+egrave 0x1a
+eacute 0x1a shift
+bracketleft 0x1a altgr
+braceleft 0x1a shift altgr
+plus 0x1b
+asterisk 0x1b shift
+bracketright 0x1b altgr
+braceright 0x1b shift altgr
+ae 0x1e altgr
+AE 0x1e shift altgr
+ssharp 0x1f altgr
+section 0x1f shift altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+dstroke 0x21 altgr
+ordfeminine 0x21 shift altgr
+eng 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+kra 0x25 altgr
+lstroke 0x26 altgr
+Lstroke 0x26 shift altgr
+ograve 0x27
+ccedilla 0x27 shift
+at 0x27 altgr
+dead_doubleacute 0x27 shift altgr
+agrave 0x28
+degree 0x28 shift
+numbersign 0x28 altgr
+backslash 0x29
+bar 0x29 shift
+notsign 0x29 altgr
+ugrave 0x2b
+section 0x2b shift
+dead_grave 0x2b altgr
+dead_breve 0x2b shift altgr
+guillemotleft 0x2c altgr
+guillemotright 0x2d altgr
+cent 0x2e altgr
+copyright 0x2e shift altgr
+leftdoublequotemark 0x2f altgr
+grave 0x2f shift altgr
+rightdoublequotemark 0x30 altgr
+mu 0x32 altgr
+masculine 0x32 shift altgr
+comma 0x33
+semicolon 0x33 shift
+horizconnector 0x33 altgr
+multiply 0x33 shift altgr
+period 0x34
+colon 0x34 shift
+periodcentered 0x34 altgr
+division 0x34 shift altgr
+minus 0x35
+underscore 0x35 shift
+dead_belowdot 0x35 altgr
+dead_abovedot 0x35 shift altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/ja
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/ja	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/ja	(revision 901)
@@ -0,0 +1,119 @@
+# generated from XKB map jp106
+# See OADG Technical reference for official scancodes:
+# http://www.oadg.or.jp/tosho/index.htm#techref
+include common
+map 0xe0010411
+keyboard_type 0x7
+keyboard_subtype 0x2
+keyboard_functionkeys 0xc
+exclam 0x02 shift
+kana_NU 0x02 altgr
+quotedbl 0x03 shift
+kana_FU 0x03 altgr
+numbersign 0x04 shift
+kana_A 0x04 altgr
+kana_a 0x04 shift altgr
+dollar 0x05 shift
+kana_U 0x05 altgr
+kana_u 0x05 shift altgr
+percent 0x06 shift
+kana_E 0x06 altgr
+kana_e 0x06 shift altgr
+ampersand 0x07 shift
+kana_O 0x07 altgr
+kana_o 0x07 shift altgr
+apostrophe 0x08 shift
+kana_YA 0x08 altgr
+kana_ya 0x08 shift altgr
+parenleft 0x09 shift
+kana_YU 0x09 altgr
+kana_yu 0x09 shift altgr
+parenright 0x0a shift
+kana_YO 0x0a altgr
+kana_yo 0x0a shift altgr
+asciitilde 0x0b shift
+kana_WA 0x0b altgr
+kana_WO 0x0b shift altgr
+minus 0x0c
+equal 0x0c shift
+kana_HO 0x0c altgr
+asciicircum 0x0d
+asciitilde 0x0d shift
+kana_HE 0x0d altgr
+kana_TA 0x10 altgr
+kana_TE 0x11 altgr
+kana_I 0x12 altgr
+kana_i 0x12 shift altgr
+kana_SU 0x13 altgr
+kana_KA 0x14 altgr
+kana_N 0x15 altgr
+kana_NA 0x16 altgr
+kana_NI 0x17 altgr
+kana_RA 0x18 altgr
+kana_SE 0x19 altgr
+at 0x1a
+grave 0x1a shift
+voicedsound 0x1a altgr
+bracketleft 0x1b
+braceleft 0x1b shift
+semivoicedsound 0x1b altgr
+kana_openingbracket 0x1b shift altgr
+kana_CHI 0x1e altgr
+kana_TO 0x1f altgr
+kana_SHI 0x20 altgr
+kana_HA 0x21 altgr
+kana_KI 0x22 altgr
+kana_KU 0x23 altgr
+kana_MA 0x24 altgr
+kana_NO 0x25 altgr
+kana_RI 0x26 altgr
+semicolon 0x27
+plus 0x27 shift
+kana_RE 0x27 altgr
+colon 0x28
+asterisk 0x28 shift
+kana_KE 0x28 altgr
+Zenkaku_Hankaku 0x29
+Kanji 0x29
+bracketright 0x2b
+braceright 0x2b shift
+kana_MU 0x2b altgr
+kana_closingbracket 0x2b shift altgr
+kana_TSU 0x2c altgr
+kana_tsu 0x2c shift altgr
+kana_SA 0x2d altgr
+kana_SO 0x2e altgr
+kana_HI 0x2f altgr
+kana_KO 0x30 altgr
+kana_MI 0x31 altgr
+kana_MO 0x32 altgr
+comma 0x33
+less 0x33 shift
+kana_NE 0x33 altgr
+kana_comma 0x33 shift altgr
+period 0x34
+greater 0x34 shift
+kana_RU 0x34 altgr
+kana_fullstop 0x34 shift altgr
+slash 0x35
+question 0x35 shift
+kana_ME 0x35 altgr
+kana_conjunctive 0x35 shift altgr
+Execute 0x54 shift
+backslash 0x73
+bar 0x7d shift
+underscore 0x73 shift
+Henkan_Mode 0x79
+Hiragana_Katakana 0x70 localstate
+Katakana 0x70
+Romaji 0x70
+Muhenkan 0x7b
+# Plain [Eisu_toggle/Caps_Lock] should NOT have shift
+Eisu_toggle 0x3a
+# [Eisu_toggle/Caps_Lock] key will generate Caps_Lock keysym 
+# only with shift+capslock stroke. Windows also expect this, so prefix a shift
+Caps_Lock 0x3a shift
+# Windows,Menu
+F13 0xdc
+Menu 0xdd
+#todo: Alt_R+Romaji doesnt romaji the IME (Alt_L+Romaji works)
Index: /trunk/autoquest-misc/src/main/resources/keymaps/ko
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/ko	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/ko	(revision 901)
@@ -0,0 +1,37 @@
+# generated from XKB map ko
+include common
+map 0xe0010412
+exclam 0x02 shift
+at 0x03 shift
+numbersign 0x04 shift
+dollar 0x05 shift
+percent 0x06 shift
+asciicircum 0x07 shift
+ampersand 0x08 shift
+asterisk 0x09 shift
+parenleft 0x0a shift
+parenright 0x0b shift
+minus 0x0c
+underscore 0x0c shift
+equal 0x0d
+plus 0x0d shift
+bracketleft 0x1a
+braceleft 0x1a shift
+bracketright 0x1b
+braceright 0x1b shift
+semicolon 0x27
+colon 0x27 shift
+apostrophe 0x28
+quotedbl 0x28 shift
+grave 0x29
+asciitilde 0x29 shift
+backslash 0x2b
+bar 0x2b shift
+comma 0x33
+less 0x33 shift
+period 0x34
+greater 0x34 shift
+slash 0x35
+question 0x35 shift
+Hangul 0xf2
+Hangul_Hanja 0xf1
Index: /trunk/autoquest-misc/src/main/resources/keymaps/lt
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/lt	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/lt	(revision 901)
@@ -0,0 +1,57 @@
+# generated from XKB map lt
+include common
+map 0x427
+exclam 0x02 shift
+aogonek 0x02 altgr
+Aogonek 0x02 shift altgr
+at 0x03 shift
+ccaron 0x03 altgr
+Ccaron 0x03 shift altgr
+numbersign 0x04 shift
+eogonek 0x04 altgr
+Eogonek 0x04 shift altgr
+dollar 0x05 shift
+eabovedot 0x05 altgr
+Eabovedot 0x05 shift altgr
+percent 0x06 shift
+iogonek 0x06 altgr
+Iogonek 0x06 shift altgr
+asciicircum 0x07 shift
+scaron 0x07 altgr
+Scaron 0x07 shift altgr
+ampersand 0x08 shift
+uogonek 0x08 altgr
+Uogonek 0x08 shift altgr
+asterisk 0x09 shift
+umacron 0x09 altgr
+Umacron 0x09 shift altgr
+parenleft 0x0a shift
+doublelowquotemark 0x0a altgr
+parenright 0x0b shift
+leftdoublequotemark 0x0b altgr
+minus 0x0c
+underscore 0x0c shift
+equal 0x0d
+plus 0x0d shift
+zcaron 0x0d altgr
+Zcaron 0x0d shift altgr
+bracketleft 0x1a
+braceleft 0x1a shift
+bracketright 0x1b
+braceright 0x1b shift
+semicolon 0x27
+colon 0x27 shift
+apostrophe 0x28
+quotedbl 0x28 shift
+grave 0x29
+asciitilde 0x29 shift
+backslash 0x2b
+bar 0x2b shift
+comma 0x33
+less 0x33 shift
+period 0x34
+greater 0x34 shift
+slash 0x35
+question 0x35 shift
+endash 0x56
+EuroSign 0x56 shift
Index: /trunk/autoquest-misc/src/main/resources/keymaps/lv
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/lv	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/lv	(revision 901)
@@ -0,0 +1,128 @@
+# generated from XKB map lv
+include common
+map 0x426
+exclam 0x02 shift
+onesuperior 0x02 altgr
+exclamdown 0x02 shift altgr
+at 0x03 shift
+twosuperior 0x03 altgr
+oneeighth 0x03 shift altgr
+numbersign 0x04 shift
+threesuperior 0x04 altgr
+sterling 0x04 shift altgr
+dollar 0x05 shift
+EuroSign 0x05 altgr
+cent 0x05 shift altgr
+percent 0x06 shift
+onehalf 0x06 altgr
+threeeighths 0x06 shift altgr
+asciicircum 0x07 shift
+threequarters 0x07 altgr
+fiveeighths 0x07 shift altgr
+ampersand 0x08 shift
+braceleft 0x08 altgr
+seveneighths 0x08 shift altgr
+asterisk 0x09 shift
+bracketleft 0x09 altgr
+trademark 0x09 shift altgr
+parenleft 0x0a shift
+bracketright 0x0a altgr
+plusminus 0x0a shift altgr
+parenright 0x0b shift
+braceright 0x0b altgr
+degree 0x0b shift altgr
+minus 0x0c
+underscore 0x0c shift
+backslash 0x0c altgr
+questiondown 0x0c shift altgr
+equal 0x0d
+plus 0x0d shift
+dead_cedilla 0x0d altgr
+dead_ogonek 0x0d shift altgr
+at 0x10 altgr
+Greek_OMEGA 0x10 shift altgr
+lstroke 0x11 altgr
+Lstroke 0x11 shift altgr
+emacron 0x12 altgr
+Emacron 0x12 shift altgr
+rcedilla 0x13 altgr
+Rcedilla 0x13 shift altgr
+tslash 0x14 altgr
+Tslash 0x14 shift altgr
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+umacron 0x16 altgr
+Umacron 0x16 shift altgr
+imacron 0x17 altgr
+Imacron 0x17 shift altgr
+omacron 0x18 altgr
+Omacron 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+bracketleft 0x1a
+braceleft 0x1a shift
+dead_diaeresis 0x1a altgr
+dead_abovering 0x1a shift altgr
+bracketright 0x1b
+braceright 0x1b shift
+dead_tilde 0x1b altgr
+dead_macron 0x1b shift altgr
+ISO_Next_Group 0x1c shift
+amacron 0x1e altgr
+Amacron 0x1e shift altgr
+scaron 0x1f altgr
+Scaron 0x1f shift altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+dstroke 0x21 altgr
+ordfeminine 0x21 shift altgr
+gcedilla 0x22 altgr
+Gcedilla 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+kcedilla 0x25 altgr
+Kcedilla 0x25 shift altgr
+lcedilla 0x26 altgr
+Lcedilla 0x26 shift altgr
+semicolon 0x27
+colon 0x27 shift
+dead_acute 0x27 altgr
+dead_doubleacute 0x27 shift altgr
+apostrophe 0x28
+quotedbl 0x28 shift
+leftdoublequotemark 0x28 altgr
+doublelowquotemark 0x28 shift altgr
+grave 0x29
+asciitilde 0x29 shift
+notsign 0x29 altgr
+backslash 0x2b
+bar 0x2b shift
+dead_grave 0x2b altgr
+dead_breve 0x2b shift altgr
+zcaron 0x2c altgr
+Zcaron 0x2c shift altgr
+guillemotright 0x2d altgr
+greater 0x2d shift altgr
+ccaron 0x2e altgr
+Ccaron 0x2e shift altgr
+leftdoublequotemark 0x2f altgr
+grave 0x2f shift altgr
+rightdoublequotemark 0x30 altgr
+apostrophe 0x30 shift altgr
+ncedilla 0x31 altgr
+Ncedilla 0x31 shift altgr
+mu 0x32 altgr
+masculine 0x32 shift altgr
+comma 0x33
+less 0x33 shift
+horizconnector 0x33 altgr
+multiply 0x33 shift altgr
+period 0x34
+greater 0x34 shift
+periodcentered 0x34 altgr
+division 0x34 shift altgr
+slash 0x35
+question 0x35 shift
+dead_belowdot 0x35 altgr
+dead_abovedot 0x35 shift altgr
+nobreakspace 0x39 altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/mk
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/mk	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/mk	(revision 901)
@@ -0,0 +1,101 @@
+# generated from XKB map mk
+include common
+map 0x42f
+exclam 0x02 shift
+at 0x03 shift
+doublelowquotemark 0x03 shift altgr
+numbersign 0x04 shift
+leftdoublequotemark 0x04 shift altgr
+dollar 0x05 shift
+percent 0x06 shift
+asciicircum 0x07 shift
+ampersand 0x08 shift
+asterisk 0x09 shift
+parenleft 0x0a shift
+parenright 0x0b shift
+minus 0x0c
+underscore 0x0c shift
+equal 0x0d
+plus 0x0d shift
+Cyrillic_lje 0x10 altgr
+Cyrillic_LJE 0x10 shift altgr
+Cyrillic_nje 0x11 altgr
+Cyrillic_NJE 0x11 shift altgr
+Cyrillic_ie 0x12 altgr
+Cyrillic_IE 0x12 shift altgr
+Cyrillic_er 0x13 altgr
+Cyrillic_ER 0x13 shift altgr
+Cyrillic_te 0x14 altgr
+Cyrillic_TE 0x14 shift altgr
+Macedonia_dse 0x15 altgr
+Macedonia_DSE 0x15 shift altgr
+Cyrillic_u 0x16 altgr
+Cyrillic_U 0x16 shift altgr
+Cyrillic_i 0x17 altgr
+Cyrillic_I 0x17 shift altgr
+Cyrillic_o 0x18 altgr
+Cyrillic_O 0x18 shift altgr
+Cyrillic_pe 0x19 altgr
+Cyrillic_PE 0x19 shift altgr
+bracketleft 0x1a
+braceleft 0x1a shift
+Cyrillic_sha 0x1a altgr
+Cyrillic_SHA 0x1a shift altgr
+bracketright 0x1b
+braceright 0x1b shift
+Macedonia_gje 0x1b altgr
+Macedonia_GJE 0x1b shift altgr
+Cyrillic_a 0x1e altgr
+Cyrillic_A 0x1e shift altgr
+Cyrillic_es 0x1f altgr
+Cyrillic_ES 0x1f shift altgr
+Cyrillic_de 0x20 altgr
+Cyrillic_DE 0x20 shift altgr
+Cyrillic_ef 0x21 altgr
+Cyrillic_EF 0x21 shift altgr
+Cyrillic_ghe 0x22 altgr
+Cyrillic_GHE 0x22 shift altgr
+Cyrillic_ha 0x23 altgr
+Cyrillic_HA 0x23 shift altgr
+Cyrillic_je 0x24 altgr
+Cyrillic_JE 0x24 shift altgr
+Cyrillic_ka 0x25 altgr
+Cyrillic_KA 0x25 shift altgr
+Cyrillic_el 0x26 altgr
+Cyrillic_EL 0x26 shift altgr
+semicolon 0x27
+colon 0x27 shift
+Cyrillic_che 0x27 altgr
+Cyrillic_CHE 0x27 shift altgr
+apostrophe 0x28
+quotedbl 0x28 shift
+Macedonia_kje 0x28 altgr
+Macedonia_KJE 0x28 shift altgr
+grave 0x29
+asciitilde 0x29 shift
+backslash 0x2b
+bar 0x2b shift
+Cyrillic_zhe 0x2b altgr
+Cyrillic_ZHE 0x2b shift altgr
+Cyrillic_ze 0x2c altgr
+Cyrillic_ZE 0x2c shift altgr
+Cyrillic_dzhe 0x2d altgr
+Cyrillic_DZHE 0x2d shift altgr
+Cyrillic_tse 0x2e altgr
+Cyrillic_TSE 0x2e shift altgr
+Cyrillic_ve 0x2f altgr
+Cyrillic_VE 0x2f shift altgr
+Cyrillic_be 0x30 altgr
+Cyrillic_BE 0x30 shift altgr
+Cyrillic_en 0x31 altgr
+Cyrillic_EN 0x31 shift altgr
+Cyrillic_em 0x32 altgr
+Cyrillic_EM 0x32 shift altgr
+comma 0x33
+less 0x33 shift
+semicolon 0x33 shift altgr
+period 0x34
+greater 0x34 shift
+colon 0x34 shift altgr
+slash 0x35
+question 0x35 shift
Index: /trunk/autoquest-misc/src/main/resources/keymaps/modifiers
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/modifiers	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/modifiers	(revision 901)
@@ -0,0 +1,18 @@
+Shift_R 0x36
+Shift_L 0x2a
+
+Alt_R 0xb8
+Mode_switch 0xb8
+ISO_Level3_Shift 0xb8
+
+Alt_L 0x38
+
+Control_R 0x9d
+Control_L 0x1d
+
+# Translate Meta, Super and Hyper to Windows keys. 
+# This is hardcoded. See documentation for details. 
+
+# Translate Menu to the Windows Application key. 
+# This one does not work either. 
+Menu 0xdd
Index: /trunk/autoquest-misc/src/main/resources/keymaps/nl
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/nl	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/nl	(revision 901)
@@ -0,0 +1,60 @@
+# Dutch (Netherlands)
+include common
+map 0x413
+
+exclam 0x02 shift
+onesuperior 0x02 altgr
+quotebl 0x03 shift
+twosuperior 0x03 altgr
+numbersign 0x04 shift
+threesuperior 0x04 altgr
+dollar 0x05 shift
+onequarter 0x05 altgr
+percent 0x06 shift
+onehalf 0x06 altgr
+ampersand 0x07 shift
+threequarters 0x07 altgr
+underscore 0x08 shift
+sterling 0x08 altgr
+parenleft 0x09 shift
+braceleft 0x09 altgr
+parenright 0x0a shift
+braceright 0x0a altgr
+apostrophe 0x0b shift
+slash 0x0c
+question 0x0c shift
+backslash 0x0c altgr
+degree 0x0d
+dead_tilde 0x0d shift
+dead_cedilla 0x0d altgr
+EuroSign 0x12 altgr
+paragraph 0x13 altgr
+dead_diaeresis 0x1a
+dead_circumflex 0x1a shift
+asterisk 0x1b
+bar 0x1b shift
+ssharp 0x1f altgr
+plus 0x27
+plusminus 0x27 shift
+dead_acute 0x28
+dead_grave 0x28 shift
+at 0x29
+section 0x29 shift
+notsign 0x29 altgr
+less 0x2b
+greater 0x2b shift
+guillemotleft 0x2c altgr
+guillemotright 0x2d altgr
+copyright 0x2e altgr 
+mu 0x32 altgr
+comma 0x33
+semicolon 0x33 shift
+period 0x34
+colon 0x34 shift
+periodcentered 0x34 altgr
+hyphen 0x35
+equal 0x35 shift
+bracketright 0x56
+bracketleft 0x56 shift
+brokenbar 0x56 altgr
+
Index: /trunk/autoquest-misc/src/main/resources/keymaps/nl-be
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/nl-be	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/nl-be	(revision 901)
@@ -0,0 +1,142 @@
+# Dutch (Belgium)
+map 0x813
+include common
+ampersand 0x02
+1 0x02 shift
+bar 0x02 altgr
+exclamdown 0x02 shift altgr
+eacute 0x03
+2 0x03 shift
+at 0x03 altgr
+oneeighth 0x03 shift altgr
+quotedbl 0x04
+3 0x04 shift
+numbersign 0x04 altgr
+sterling 0x04 shift altgr
+apostrophe 0x05
+4 0x05 shift
+onequarter 0x05 altgr
+dollar 0x05 shift altgr
+parenleft 0x06
+5 0x06 shift
+onehalf 0x06 altgr
+threeeighths 0x06 shift altgr
+section 0x07
+6 0x07 shift
+asciicircum 0x07 altgr
+fiveeighths 0x07 shift altgr
+egrave 0x08
+7 0x08 shift
+braceleft 0x08 altgr
+seveneighths 0x08 shift altgr
+exclam 0x09
+8 0x09 shift
+bracketleft 0x09 altgr
+trademark 0x09 shift altgr
+ccedilla 0x0a
+9 0x0a shift
+braceleft 0x0a altgr
+plusminus 0x0a shift altgr
+agrave 0x0b
+0 0x0b shift
+braceright 0x0b altgr
+degree 0x0b shift altgr
+parenright 0x0c
+degree 0x0c shift
+backslash 0x0c altgr
+questiondown 0x0c shift altgr
+minus 0x0d
+underscore 0x0d shift
+dead_cedilla 0x0d altgr
+dead_ogonek 0x0d shift altgr
+a 0x10 addupper
+# at 0x10 altgr
+Greek_OMEGA 0x10 shift altgr
+z 0x11 addupper
+lstroke 0x11 altgr
+Lstroke 0x11 shift altgr
+EuroSign 0x12 altgr
+cent 0x12 shift altgr
+paragraph 0x13 altgr
+registered 0x13 shift altgr
+tslash 0x14 altgr
+Tslash 0x14 shift altgr
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oslash 0x18 altgr
+Ooblique 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+dead_circumflex 0x1a
+dead_diaeresis 0x1a shift
+bracketleft 0x1a altgr
+dead_abovering 0x1a shift altgr
+dollar 0x1b
+asterisk 0x1b shift
+bracketright 0x1b altgr
+dead_macron 0x1b shift altgr
+q 0x1e addupper
+ae 0x1e altgr
+AE 0x1e shift altgr
+ssharp 0x1f altgr
+section 0x1f shift altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+dstroke 0x21 altgr
+ordfeminine 0x21 shift altgr
+eng 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+kra 0x25 altgr
+# ampersand 0x25 shift altgr
+lstroke 0x26 altgr
+Lstroke 0x26 shift altgr
+m 0x27 addupper
+dead_acute 0x27 altgr
+dead_doubleacute 0x27 shift altgr
+ugrave 0x28
+percent 0x28 shift
+dead_acute 0x28 altgr
+dead_caron 0x28 shift altgr
+twosuperior 0x29
+threesuperior 0x29 shift
+notsign 0x29 altgr
+mu 0x2b
+sterling 0x2b shift
+dead_grave 0x2b altgr
+dead_breve 0x2b shift altgr
+w 0x2c addupper
+guillemotleft 0x2c altgr
+less 0x2c shift altgr
+guillemotright 0x2d altgr
+greater 0x2d shift altgr
+cent 0x2e altgr
+copyright 0x2e shift altgr
+leftdoublequotemark 0x2f altgr
+grave 0x2f shift altgr
+rightdoublequotemark 0x30 altgr
+# apostrophe 0x30 shift altgr
+comma 0x32
+question 0x32 shift
+dead_cedilla 0x32 altgr
+masculine 0x32 shift altgr
+semicolon 0x33
+period 0x33 shift
+horizconnector 0x33 altgr
+multiply 0x33 shift altgr
+colon 0x34
+slash 0x34 shift
+periodcentered 0x34 altgr
+division 0x34 shift altgr
+equal 0x35
+plus 0x35 shift
+dead_tilde 0x35 altgr
+dead_abovedot 0x35 shift altgr
+backslash 0x56 altgr
+less 0x56 
+greater 0x56 shift
Index: /trunk/autoquest-misc/src/main/resources/keymaps/no
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/no	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/no	(revision 901)
@@ -0,0 +1,119 @@
+# generated from XKB map no
+include common
+map 0x414
+exclam 0x02 shift
+exclamdown 0x02 altgr
+onesuperior 0x02 shift altgr
+quotedbl 0x03 shift
+at 0x03 altgr
+twosuperior 0x03 shift altgr
+numbersign 0x04 shift
+sterling 0x04 altgr
+threesuperior 0x04 shift altgr
+currency 0x05 shift
+dollar 0x05 altgr
+onequarter 0x05 shift altgr
+percent 0x06 shift
+onehalf 0x06 altgr
+cent 0x06 shift altgr
+ampersand 0x07 shift
+yen 0x07 altgr
+fiveeighths 0x07 shift altgr
+slash 0x08 shift
+braceleft 0x08 altgr
+division 0x08 shift altgr
+parenleft 0x09 shift
+bracketleft 0x09 altgr
+guillemotleft 0x09 shift altgr
+parenright 0x0a shift
+bracketright 0x0a altgr
+guillemotright 0x0a shift altgr
+equal 0x0b shift
+braceright 0x0b altgr
+degree 0x0b shift altgr
+plus 0x0c
+question 0x0c shift
+plusminus 0x0c altgr
+questiondown 0x0c shift altgr
+backslash 0x0d
+dead_grave 0x0d shift
+dead_acute 0x0d altgr
+notsign 0x0d shift altgr
+Greek_OMEGA 0x10 shift altgr
+lstroke 0x11 altgr
+Lstroke 0x11 shift altgr
+EuroSign 0x12 altgr
+cent 0x12 shift altgr
+registered 0x13 altgr
+thorn 0x14 altgr
+THORN 0x14 shift altgr
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oe 0x18 altgr
+OE 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+aring 0x1a
+Aring 0x1a shift
+dead_diaeresis 0x1a altgr
+dead_abovering 0x1a shift altgr
+dead_diaeresis 0x1b
+dead_circumflex 0x1b shift
+asciicircum 0x01b shift
+dead_tilde 0x1b altgr
+asciitilde 0x1b altgr
+dead_caron 0x1b shift altgr
+ordfeminine 0x1e altgr
+masculine 0x1e shift altgr
+ssharp 0x1f altgr
+section 0x1f shift altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+dstroke 0x21 altgr
+ordfeminine 0x21 shift altgr
+eng 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+kra 0x25 altgr
+lstroke 0x26 altgr
+Lstroke 0x26 shift altgr
+oslash 0x27
+Ooblique 0x27 shift
+dead_doubleacute 0x27 shift altgr
+ae 0x28
+AE 0x28 shift
+dead_caron 0x28 shift altgr
+bar 0x29
+section 0x29 shift
+brokenbar 0x29 altgr
+paragraph 0x29 shift altgr
+apostrophe 0x2b
+asterisk 0x2b shift
+multiply 0x2b shift altgr
+guillemotleft 0x2c altgr
+guillemotright 0x2d altgr
+copyright 0x2e altgr
+leftdoublequotemark 0x2f altgr
+rightdoublequotemark 0x30 altgr
+mu 0x32 altgr
+masculine 0x32 shift altgr
+comma 0x33
+semicolon 0x33 shift
+dead_cedilla 0x33 altgr
+dead_ogonek 0x33 shift altgr
+period 0x34
+colon 0x34 shift
+periodcentered 0x34 altgr
+dead_abovedot 0x34 shift altgr
+minus 0x35
+underscore 0x35 shift
+hyphen 0x35 altgr
+macron 0x35 shift altgr
+nobreakspace 0x39 altgr
+onehalf 0x56 altgr
+threequarters 0x56 shift altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/pl
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/pl	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/pl	(revision 901)
@@ -0,0 +1,122 @@
+# generated from XKB map pl
+include common
+map 0x415
+exclam 0x02 shift
+onesuperior 0x02 altgr
+exclamdown 0x02 shift altgr
+at 0x03 shift
+twosuperior 0x03 altgr
+oneeighth 0x03 shift altgr
+numbersign 0x04 shift
+threesuperior 0x04 altgr
+sterling 0x04 shift altgr
+dollar 0x05 shift
+onequarter 0x05 altgr
+percent 0x06 shift
+onehalf 0x06 altgr
+threeeighths 0x06 shift altgr
+asciicircum 0x07 shift
+threequarters 0x07 altgr
+fiveeighths 0x07 shift altgr
+ampersand 0x08 shift
+braceleft 0x08 altgr
+seveneighths 0x08 shift altgr
+asterisk 0x09 shift
+bracketleft 0x09 altgr
+trademark 0x09 shift altgr
+parenleft 0x0a shift
+bracketright 0x0a altgr
+plusminus 0x0a shift altgr
+parenright 0x0b shift
+braceright 0x0b altgr
+degree 0x0b shift altgr
+minus 0x0c
+underscore 0x0c shift
+backslash 0x0c altgr
+questiondown 0x0c shift altgr
+equal 0x0d
+plus 0x0d shift
+dead_cedilla 0x0d altgr
+dead_ogonek 0x0d shift altgr
+Greek_OMEGA 0x10 shift altgr
+lstroke 0x11 altgr
+Lstroke 0x11 shift altgr
+eogonek 0x12 altgr
+Eogonek 0x12 shift altgr
+paragraph 0x13 altgr
+registered 0x13 shift altgr
+tslash 0x14 altgr
+Tslash 0x14 shift altgr
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+EuroSign 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oacute 0x18 altgr
+Oacute 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+bracketleft 0x1a
+braceleft 0x1a shift
+dead_diaeresis 0x1a altgr
+dead_abovering 0x1a shift altgr
+bracketright 0x1b
+braceright 0x1b shift
+dead_tilde 0x1b altgr
+dead_macron 0x1b shift altgr
+aogonek 0x1e altgr
+Aogonek 0x1e shift altgr
+sacute 0x1f altgr
+Sacute 0x1f shift altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+dstroke 0x21 altgr
+ordfeminine 0x21 shift altgr
+eng 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+kra 0x25 altgr
+lstroke 0x26 altgr
+Lstroke 0x26 shift altgr
+semicolon 0x27
+colon 0x27 shift
+dead_acute 0x27 altgr
+dead_doubleacute 0x27 shift altgr
+apostrophe 0x28
+quotedbl 0x28 shift
+dead_circumflex 0x28 altgr
+dead_caron 0x28 shift altgr
+grave 0x29
+asciitilde 0x29 shift
+notsign 0x29 altgr
+backslash 0x2b
+bar 0x2b shift
+dead_grave 0x2b altgr
+dead_breve 0x2b shift altgr
+zabovedot 0x2c altgr
+Zabovedot 0x2c shift altgr
+zacute 0x2d altgr
+Zacute 0x2d shift altgr
+cacute 0x2e altgr
+Cacute 0x2e shift altgr
+leftdoublequotemark 0x2f altgr
+grave 0x2f shift altgr
+rightdoublequotemark 0x30 altgr
+nacute 0x31 altgr
+Nacute 0x31 shift altgr
+mu 0x32 altgr
+masculine 0x32 shift altgr
+comma 0x33
+less 0x33 shift
+horizconnector 0x33 altgr
+multiply 0x33 shift altgr
+period 0x34
+greater 0x34 shift
+periodcentered 0x34 altgr
+division 0x34 shift altgr
+slash 0x35
+question 0x35 shift
+dead_belowdot 0x35 altgr
+dead_abovedot 0x35 shift altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/pt
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/pt	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/pt	(revision 901)
@@ -0,0 +1,113 @@
+# generated from XKB map pt
+include common
+map 0x816
+exclam 0x02 shift
+onesuperior 0x02 altgr
+exclamdown 0x02 shift altgr
+quotedbl 0x03 shift
+at 0x03 altgr
+oneeighth 0x03 shift altgr
+numbersign 0x04 shift
+sterling 0x04 altgr
+dollar 0x05 shift
+section 0x05 altgr
+percent 0x06 shift
+onehalf 0x06 altgr
+threeeighths 0x06 shift altgr
+ampersand 0x07 shift
+threequarters 0x07 altgr
+fiveeighths 0x07 shift altgr
+slash 0x08 shift
+braceleft 0x08 altgr
+seveneighths 0x08 shift altgr
+parenleft 0x09 shift
+bracketleft 0x09 altgr
+trademark 0x09 shift altgr
+parenright 0x0a shift
+bracketright 0x0a altgr
+plusminus 0x0a shift altgr
+equal 0x0b shift
+braceright 0x0b altgr
+degree 0x0b shift altgr
+apostrophe 0x0c
+question 0x0c shift
+backslash 0x0c altgr
+questiondown 0x0c shift altgr
+guillemotleft 0x0d
+guillemotright 0x0d shift
+dead_cedilla 0x0d altgr
+dead_ogonek 0x0d shift altgr
+Greek_OMEGA 0x10 shift altgr
+lstroke 0x11 altgr
+Lstroke 0x11 shift altgr
+EuroSign 0x12 altgr
+cent 0x12 shift altgr
+paragraph 0x13 altgr
+registered 0x13 shift altgr
+tslash 0x14 altgr
+Tslash 0x14 shift altgr
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oslash 0x18 altgr
+Ooblique 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+plus 0x1a
+asterisk 0x1a shift
+dead_diaeresis 0x1a altgr
+dead_abovering 0x1a shift altgr
+dead_acute 0x1b
+dead_grave 0x1b shift
+dead_tilde 0x1b altgr
+dead_macron 0x1b shift altgr
+ae 0x1e altgr
+AE 0x1e shift altgr
+ssharp 0x1f altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+dstroke 0x21 altgr
+ordfeminine 0x21 shift altgr
+eng 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+kra 0x25 altgr
+lstroke 0x26 altgr
+Lstroke 0x26 shift altgr
+ccedilla 0x27
+Ccedilla 0x27 shift
+dead_doubleacute 0x27 shift altgr
+masculine 0x28
+ordfeminine 0x28 shift
+dead_circumflex 0x28 altgr
+dead_caron 0x28 shift altgr
+backslash 0x29
+bar 0x29 shift
+notsign 0x29 altgr
+dead_tilde 0x2b
+dead_circumflex 0x2b shift
+dead_breve 0x2b shift altgr
+less 0x56
+greater 0x56 shift
+cent 0x2e altgr
+copyright 0x2e shift altgr
+leftdoublequotemark 0x2f altgr
+grave 0x2f shift altgr
+rightdoublequotemark 0x30 altgr
+mu 0x32 altgr
+comma 0x33
+semicolon 0x33 shift
+horizconnector 0x33 altgr
+multiply 0x33 shift altgr
+period 0x34
+colon 0x34 shift
+periodcentered 0x34 altgr
+division 0x34 shift altgr
+minus 0x35
+underscore 0x35 shift
+dead_belowdot 0x35 altgr
+dead_abovedot 0x35 shift altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/pt-br
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/pt-br	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/pt-br	(revision 901)
@@ -0,0 +1,69 @@
+# generated from XKB map br
+include common
+map 0x416
+exclam 0x02 shift
+onesuperior 0x02 altgr
+exclamdown 0x02 shift altgr
+at 0x03 shift
+twosuperior 0x03 altgr
+onehalf 0x03 shift altgr
+numbersign 0x04 shift
+threesuperior 0x04 altgr
+threequarters 0x04 shift altgr
+dollar 0x05 shift
+sterling 0x05 altgr
+onequarter 0x05 shift altgr
+percent 0x06 shift
+cent 0x06 altgr
+dead_diaeresis 0x07 shift
+notsign 0x07 altgr
+diaeresis 0x07 shift altgr
+ampersand 0x08 shift
+braceleft 0x08 altgr
+asterisk 0x09 shift
+bracketleft 0x09 altgr
+parenleft 0x0a shift
+bracketright 0x0a altgr
+parenright 0x0b shift
+braceright 0x0b altgr
+minus 0x0c
+underscore 0x0c shift
+backslash 0x0c altgr
+equal 0x0d
+plus 0x0d shift
+section 0x0d altgr
+EuroSign 0x12 altgr
+registered 0x13 altgr
+dead_acute 0x1a
+dead_grave 0x1a shift
+acute 0x1a altgr
+grave 0x1a shift altgr
+bracketleft 0x1b
+braceleft 0x1b shift
+ordfeminine 0x1b altgr
+ccedilla 0x27
+Ccedilla 0x27 shift
+dead_tilde 0x28
+dead_circumflex 0x28 shift
+asciitilde 0x28 altgr
+asciicircum 0x28 shift altgr
+apostrophe 0x29
+quotedbl 0x29 shift
+bracketright 0x2b
+braceright 0x2b shift
+masculine 0x2b altgr
+copyright 0x2e altgr
+mu 0x32 altgr
+comma 0x33
+less 0x33 shift
+period 0x34
+greater 0x34 shift
+semicolon 0x35
+colon 0x35 shift
+comma 0x53 numlock
+backslash 0x56
+bar 0x56 shift
+slash 0x73
+question 0x73 shift
+degree 0x73 altgr
+KP_Decimal 0x34
Index: /trunk/autoquest-misc/src/main/resources/keymaps/ru
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/ru	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/ru	(revision 901)
@@ -0,0 +1,109 @@
+# generated from XKB map ru
+include common
+map 0x419
+exclam 0x02 shift
+at 0x03 shift
+quotedbl 0x03 shift altgr
+numbersign 0x04 shift
+dollar 0x05 shift
+asterisk 0x05 shift altgr
+percent 0x06 shift
+colon 0x06 shift altgr
+asciicircum 0x07 shift
+comma 0x07 shift altgr
+ampersand 0x08 shift
+period 0x08 shift altgr
+asterisk 0x09 shift
+semicolon 0x09 shift altgr
+parenleft 0x0a shift
+parenright 0x0b shift
+minus 0x0c
+underscore 0x0c shift
+equal 0x0d
+plus 0x0d shift
+Cyrillic_shorti 0x10 altgr
+Cyrillic_SHORTI 0x10 shift altgr
+Cyrillic_tse 0x11 altgr
+Cyrillic_TSE 0x11 shift altgr
+Cyrillic_u 0x12 altgr
+Cyrillic_U 0x12 shift altgr
+Cyrillic_ka 0x13 altgr
+Cyrillic_KA 0x13 shift altgr
+Cyrillic_ie 0x14 altgr
+Cyrillic_IE 0x14 shift altgr
+Cyrillic_en 0x15 altgr
+Cyrillic_EN 0x15 shift altgr
+Cyrillic_ghe 0x16 altgr
+Cyrillic_GHE 0x16 shift altgr
+Cyrillic_sha 0x17 altgr
+Cyrillic_SHA 0x17 shift altgr
+Cyrillic_shcha 0x18 altgr
+Cyrillic_SHCHA 0x18 shift altgr
+Cyrillic_ze 0x19 altgr
+Cyrillic_ZE 0x19 shift altgr
+bracketleft 0x1a
+braceleft 0x1a shift
+Cyrillic_ha 0x1a altgr
+Cyrillic_HA 0x1a shift altgr
+bracketright 0x1b
+braceright 0x1b shift
+Cyrillic_hardsign 0x1b altgr
+Cyrillic_HARDSIGN 0x1b shift altgr
+Cyrillic_ef 0x1e altgr
+Cyrillic_EF 0x1e shift altgr
+Cyrillic_yeru 0x1f altgr
+Cyrillic_YERU 0x1f shift altgr
+Cyrillic_ve 0x20 altgr
+Cyrillic_VE 0x20 shift altgr
+Cyrillic_a 0x21 altgr
+Cyrillic_A 0x21 shift altgr
+Cyrillic_pe 0x22 altgr
+Cyrillic_PE 0x22 shift altgr
+Cyrillic_er 0x23 altgr
+Cyrillic_ER 0x23 shift altgr
+Cyrillic_o 0x24 altgr
+Cyrillic_O 0x24 shift altgr
+Cyrillic_el 0x25 altgr
+Cyrillic_EL 0x25 shift altgr
+Cyrillic_de 0x26 altgr
+Cyrillic_DE 0x26 shift altgr
+semicolon 0x27
+colon 0x27 shift
+Cyrillic_zhe 0x27 altgr
+Cyrillic_ZHE 0x27 shift altgr
+apostrophe 0x28
+quotedbl 0x28 shift
+Cyrillic_e 0x28 altgr
+Cyrillic_E 0x28 shift altgr
+grave 0x29
+asciitilde 0x29 shift
+Cyrillic_io 0x29 altgr
+Cyrillic_IO 0x29 shift altgr
+backslash 0x2b
+bar 0x2b shift
+Cyrillic_ya 0x2c altgr
+Cyrillic_YA 0x2c shift altgr
+Cyrillic_che 0x2d altgr
+Cyrillic_CHE 0x2d shift altgr
+Cyrillic_es 0x2e altgr
+Cyrillic_ES 0x2e shift altgr
+Cyrillic_em 0x2f altgr
+Cyrillic_EM 0x2f shift altgr
+Cyrillic_i 0x30 altgr
+Cyrillic_I 0x30 shift altgr
+Cyrillic_te 0x31 altgr
+Cyrillic_TE 0x31 shift altgr
+Cyrillic_softsign 0x32 altgr
+Cyrillic_SOFTSIGN 0x32 shift altgr
+comma 0x33
+less 0x33 shift
+Cyrillic_be 0x33 altgr
+Cyrillic_BE 0x33 shift altgr
+period 0x34
+greater 0x34 shift
+Cyrillic_yu 0x34 altgr
+Cyrillic_YU 0x34 shift altgr
+slash 0x35
+question 0x35 shift
+slash 0x56 altgr
+bar 0x56 shift altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/sl
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/sl	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/sl	(revision 901)
@@ -0,0 +1,110 @@
+# generated from XKB map sl
+include common
+map 0x424
+exclam 0x02 shift
+asciitilde 0x02 altgr
+dead_tilde 0x02 shift altgr
+quotedbl 0x03 shift
+dead_caron 0x03 altgr
+caron 0x03 shift altgr
+numbersign 0x04 shift
+asciicircum 0x04 altgr
+dead_circumflex 0x04 shift altgr
+dollar 0x05 shift
+dead_breve 0x05 altgr
+breve 0x05 shift altgr
+percent 0x06 shift
+degree 0x06 altgr
+dead_abovering 0x06 shift altgr
+ampersand 0x07 shift
+dead_ogonek 0x07 altgr
+ogonek 0x07 shift altgr
+slash 0x08 shift
+grave 0x08 altgr
+dead_grave 0x08 shift altgr
+parenleft 0x09 shift
+dead_abovedot 0x09 altgr
+abovedot 0x09 shift altgr
+parenright 0x0a shift
+dead_acute 0x0a altgr
+equal 0x0b shift
+dead_doubleacute 0x0b altgr
+doubleacute 0x0b shift altgr
+apostrophe 0x0c
+question 0x0c shift
+dead_diaeresis 0x0c altgr
+diaeresis 0x0c shift altgr
+plus 0x0d
+asterisk 0x0d shift
+dead_cedilla 0x0d altgr
+cedilla 0x0d shift altgr
+backslash 0x10 altgr
+Greek_OMEGA 0x10 shift altgr
+bar 0x11 altgr
+Lstroke 0x11 shift altgr
+EuroSign 0x12 altgr
+paragraph 0x13 altgr
+registered 0x13 shift altgr
+tslash 0x14 altgr
+Tslash 0x14 shift altgr
+z 0x15 addupper
+leftarrow 0x15 altgr
+yen 0x15 shift altgr
+downarrow 0x16 altgr
+uparrow 0x16 shift altgr
+rightarrow 0x17 altgr
+idotless 0x17 shift altgr
+oslash 0x18 altgr
+Ooblique 0x18 shift altgr
+thorn 0x19 altgr
+THORN 0x19 shift altgr
+scaron 0x1a
+Scaron 0x1a shift
+division 0x1a altgr
+dstroke 0x1b
+Dstroke 0x1b shift
+multiply 0x1b altgr
+dead_macron 0x1b shift altgr
+ae 0x1e altgr
+AE 0x1e shift altgr
+ssharp 0x1f altgr
+section 0x1f shift altgr
+eth 0x20 altgr
+ETH 0x20 shift altgr
+bracketleft 0x21 altgr
+ordfeminine 0x21 shift altgr
+bracketright 0x22 altgr
+ENG 0x22 shift altgr
+hstroke 0x23 altgr
+Hstroke 0x23 shift altgr
+lstroke 0x25 altgr
+Lstroke 0x26 altgr
+ccaron 0x27
+Ccaron 0x27 shift
+cacute 0x28
+Cacute 0x28 shift
+ssharp 0x28 altgr
+dead_cedilla 0x29
+notsign 0x29 altgr
+zcaron 0x2b
+Zcaron 0x2b shift
+currency 0x2b altgr
+y 0x2c addupper
+guillemotleft 0x2c altgr
+guillemotright 0x2d altgr
+cent 0x2e altgr
+copyright 0x2e shift altgr
+at 0x2f altgr
+braceleft 0x30 altgr
+braceright 0x31 altgr
+section 0x32 altgr
+masculine 0x32 shift altgr
+comma 0x33
+semicolon 0x33 shift
+horizconnector 0x33 altgr
+period 0x34
+colon 0x34 shift
+periodcentered 0x34 altgr
+minus 0x35
+underscore 0x35 shift
+dead_belowdot 0x35 altgr
Index: /trunk/autoquest-misc/src/main/resources/keymaps/sv
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/sv	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/sv	(revision 901)
@@ -0,0 +1,80 @@
+map 0x0000041d
+include common
+
+#
+# Top row
+#
+section 0x29
+onehalf 0x29 shift
+
+# 1
+exclam 0x2 shift
+
+# 2
+quotedbl 0x3 shift
+at 0x3 altgr
+
+# 3
+numbersign 0x4 shift
+sterling 0x4 altgr
+# 4
+currency 0x5 shift
+dollar 0x5 altgr
+# 5
+percent 0x6 shift
+# 6
+ampersand 0x7 shift
+# 7
+slash 0x8 shift
+braceleft 0x8 altgr
+# 8
+parenleft 0x9 shift
+bracketleft 0x9 altgr
+# 9
+parenright 0xa shift
+bracketright 0xa altgr
+# 0
+equal 0xb shift
+braceright 0xb altgr
+
+plus 0xc
+question 0xc shift
+backslash 0xc altgr
+
+dead_acute 0xd
+dead_grave 0xd shift
+
+#
+# QWERTY first row
+#
+EuroSign 0x12 altgr
+aring 0x1a 
+Aring 0x1a shift
+dead_diaeresis 0x1b 
+dead_circumflex 0x1b shift
+dead_tilde 0x1b altgr
+
+#
+# QWERTY second row
+#
+odiaeresis 0x27 
+Odiaeresis 0x27 shift
+adiaeresis 0x28 
+Adiaeresis 0x28 shift
+apostrophe 0x2b
+asterisk 0x2b shift
+
+#
+# QWERTY third row
+#
+less 0x56
+greater 0x56 shift
+bar 0x56 altgr
+mu 0x32 altgr
+comma 0x33
+semicolon 0x33 shift
+period 0x34
+colon 0x34 shift
+minus 0x35
+underscore 0x35 shift
+
Index: /trunk/autoquest-misc/src/main/resources/keymaps/th
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/th	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/th	(revision 901)
@@ -0,0 +1,131 @@
+# generated from XKB map th
+include common
+map 0x41e
+exclam 0x02 shift
+Thai_lakkhangyao 0x02 altgr
+plus 0x02 shift altgr
+at 0x03 shift
+slash 0x03 altgr
+Thai_leknung 0x03 shift altgr
+numbersign 0x04 shift
+minus 0x04 altgr
+Thai_leksong 0x04 shift altgr
+dollar 0x05 shift
+Thai_phosamphao 0x05 altgr
+Thai_leksam 0x05 shift altgr
+percent 0x06 shift
+Thai_thothung 0x06 altgr
+Thai_leksi 0x06 shift altgr
+asciicircum 0x07 shift
+Thai_sarau 0x07 altgr
+Thai_sarauu 0x07 shift altgr
+ampersand 0x08 shift
+Thai_saraue 0x08 altgr
+Thai_baht 0x08 shift altgr
+asterisk 0x09 shift
+Thai_khokhwai 0x09 altgr
+Thai_lekha 0x09 shift altgr
+parenleft 0x0a shift
+Thai_totao 0x0a altgr
+Thai_lekhok 0x0a shift altgr
+parenright 0x0b shift
+Thai_chochan 0x0b altgr
+Thai_lekchet 0x0b shift altgr
+minus 0x0c
+underscore 0x0c shift
+Thai_khokhai 0x0c altgr
+Thai_lekpaet 0x0c shift altgr
+equal 0x0d
+plus 0x0d shift
+Thai_chochang 0x0d altgr
+Thai_lekkao 0x0d shift altgr
+Thai_maiyamok 0x10 altgr
+Thai_leksun 0x10 shift altgr
+Thai_saraaimaimalai 0x11 altgr
+quotedbl 0x11 shift altgr
+Thai_saraam 0x12 altgr
+Thai_dochada 0x12 shift altgr
+Thai_phophan 0x13 altgr
+Thai_thonangmontho 0x13 shift altgr
+Thai_saraa 0x14 altgr
+Thai_thothong 0x14 shift altgr
+Thai_maihanakat 0x15 altgr
+Thai_nikhahit 0x15 shift altgr
+Thai_saraii 0x16 altgr
+Thai_maitri 0x16 shift altgr
+Thai_rorua 0x17 altgr
+Thai_nonen 0x17 shift altgr
+Thai_nonu 0x18 altgr
+Thai_paiyannoi 0x18 shift altgr
+Thai_yoyak 0x19 altgr
+Thai_yoying 0x19 shift altgr
+bracketleft 0x1a
+braceleft 0x1a shift
+Thai_bobaimai 0x1a altgr
+Thai_thothan 0x1a shift altgr
+bracketright 0x1b
+braceright 0x1b shift
+Thai_loling 0x1b altgr
+comma 0x1b shift altgr
+Thai_fofan 0x1e altgr
+Thai_ru 0x1e shift altgr
+Thai_hohip 0x1f altgr
+Thai_khorakhang 0x1f shift altgr
+Thai_kokai 0x20 altgr
+Thai_topatak 0x20 shift altgr
+Thai_dodek 0x21 altgr
+Thai_sarao 0x21 shift altgr
+Thai_sarae 0x22 altgr
+Thai_chochoe 0x22 shift altgr
+Thai_maitho 0x23 altgr
+Thai_maitaikhu 0x23 shift altgr
+Thai_maiek 0x24 altgr
+Thai_maichattawa 0x24 shift altgr
+Thai_saraaa 0x25 altgr
+Thai_sorusi 0x25 shift altgr
+Thai_sosua 0x26 altgr
+Thai_sosala 0x26 shift altgr
+semicolon 0x27
+colon 0x27 shift
+Thai_wowaen 0x27 altgr
+Thai_soso 0x27 shift altgr
+apostrophe 0x28
+quotedbl 0x28 shift
+Thai_ngongu 0x28 altgr
+period 0x28 shift altgr
+grave 0x29
+asciitilde 0x29 shift
+underscore 0x29 altgr
+percent 0x29 shift altgr
+ISO_First_Group 0x2a shift
+backslash 0x2b
+bar 0x2b shift
+Thai_khokhuat 0x2b altgr
+Thai_khokhon 0x2b shift altgr
+Thai_phophung 0x2c altgr
+parenleft 0x2c shift altgr
+Thai_popla 0x2d altgr
+parenright 0x2d shift altgr
+Thai_saraae 0x2e altgr
+Thai_choching 0x2e shift altgr
+Thai_oang 0x2f altgr
+Thai_honokhuk 0x2f shift altgr
+Thai_sarai 0x30 altgr
+Thai_phinthu 0x30 shift altgr
+Thai_sarauee 0x31 altgr
+Thai_thanthakhat 0x31 shift altgr
+Thai_thothahan 0x32 altgr
+question 0x32 shift altgr
+comma 0x33
+less 0x33 shift
+Thai_moma 0x33 altgr
+Thai_thophuthao 0x33 shift altgr
+period 0x34
+greater 0x34 shift
+Thai_saraaimaimuan 0x34 altgr
+Thai_lochula 0x34 shift altgr
+slash 0x35
+question 0x35 shift
+Thai_fofa 0x35 altgr
+Thai_lu 0x35 shift altgr
+ISO_Last_Group 0x36 shift
Index: /trunk/autoquest-misc/src/main/resources/keymaps/tr
===================================================================
--- /trunk/autoquest-misc/src/main/resources/keymaps/tr	(revision 901)
+++ /trunk/autoquest-misc/src/main/resources/keymaps/tr	(revision 901)
@@ -0,0 +1,138 @@
+# rdesktop Turkish Q Keyboard Layout
+#
+# Modified by Umit Oztosun <umit@liqia.com> 20040328
+#
+# Modified from the original mapping file provided with rdesktop 1.3.1.
+# This version works correctly with the right X settings.
+
+include common
+map 0x41f
+
+# First row
+quotedbl 0x29
+eacute 0x29 shift
+backslash 0x29 altgr
+
+exclam 0x02 shift
+onesuperior 0x02 altgr
+exclamdown 0x02 shift altgr
+
+apostrophe 0x03 shift
+sterling 0x03 altgr
+twosuperior 0x03 shift altgr
+
+dead_circumflex 0x04 shift
+numbersign 0x04 altgr
+threesuperior 0x04 shift altgr
+
+plus 0x05 shift
+dollar 0x05 altgr
+onequarter 0x05 shift altgr
+
+percent 0x06 shift
+onehalf 0x06 altgr
+threeeighths 0x06 shift altgr
+
+ampersand 0x07 shift
+threequarters 0x07 altgr
+
+slash 0x08 shift
+braceleft 0x08 altgr
+
+parenleft 0x09 shift
+bracketleft 0x09 altgr
+
+parenright 0x0a shift
+bracketright 0x0a altgr
+plusminus 0x0a shift altgr
+
+equal 0x0b shift
+braceright 0x0b altgr
+degree 0x0b shift altgr
+
+asterisk 0x0c
+question 0x0c shift
+backslash 0x0c altgr
+questiondown 0x0c shift altgr
+
+minus 0x0d
+underscore 0x0d shift
+division 0x0d altgr
+
+at 0x10 altgr
+
+EuroSign 0x12 altgr
+
+trademark 0x14 altgr
+
+ucircumflex 0x16 altgr
+Ucircumflex 0x16 shift altgr
+
+idotless 0x17
+I 0x17 shift
+icircumflex 0x17 altgr
+Icircumflex 0x17 altgr shift
+
+ocircumflex 0x18 altgr
+Ocircumflex 0x18 shift altgr
+
+gbreve 0x1a
+Gbreve 0x1a shift
+
+udiaeresis 0x1b
+Udiaeresis 0x1b shift
+asciitilde 0x1b altgr
+dead_macron 0x1b shift altgr
+
+comma 0x2b
+semicolon 0x2b shift
+grave 0x2b altgr
+dead_grave 0x2b altgr shift
+
+# Second row
+
+acircumflex 0x1e altgr
+Acircumflex 0x1e shift altgr
+
+section 0x1f altgr
+
+ordfeminine 0x21 altgr
+
+scedilla 0x27
+Scedilla 0x27 shift
+acute 0x27 altgr
+dead_acute 0x27 shift altgr
+
+i 0x28
+Iabovedot 0x28 shift
+dead_caron 0x28 shift altgr
+
+less 0x56
+greater 0x56 shift
+bar 0x56 altgr
+brokenbar 0x56 shift altgr
+
+cent 0x2e altgr
+copyright 0x2e shift altgr
+
+leftdoublequotemark 0x2f altgr
+
+rightdoublequotemark 0x30 altgr
+
+mu 0x32 altgr
+masculine 0x32 shift altgr
+
+odiaeresis 0x33
+Odiaeresis 0x33 shift
+multiply 0x33 altgr
+
+ccedilla 0x34
+Ccedilla 0x34 shift
+periodcentered 0x34 altgr
+division 0x34 shift altgr
+
+period 0x35
+colon 0x35 shift
+dead_abovedot 0x35 altgr
+dead_abovedot 0x35 shift altgr
+
