internal static string GetKeyboardLayoutXml(KeyboardLayoutName name)
        {
            string xml;

            switch (name)
            {
            default:
                Debug.Assert(name == KeyboardLayoutName.Default, "Default layout is default!");
                xml = Properties.Resources.Default;
                break;

            case KeyboardLayoutName.Tabtip:
                xml = Properties.Resources.KeyboardLayoutTabTip;
                break;

            case KeyboardLayoutName.Tobii:
                xml = Properties.Resources.KeyboardLayoutTobii;
                break;

            case KeyboardLayoutName.ThreeRowed:
                xml = Properties.Resources.ThreeRowed;
                break;

            case KeyboardLayoutName.Krohn:
                xml = Properties.Resources.KrohnKeyboard;
                break;

            case KeyboardLayoutName.NonArturo14:
                xml = Properties.Resources.NonArturo14;
                break;

            case KeyboardLayoutName.Supersize:
                xml = Properties.Resources.Supersize;
                break;

            case KeyboardLayoutName.Q15:
                xml = Properties.Resources.Q15;
                break;

            case KeyboardLayoutName.Q9:
                xml = Properties.Resources.Q9;
                break;

            case KeyboardLayoutName.Q6:
                xml = Properties.Resources.Q6;
                break;

            case KeyboardLayoutName.Custom:
                // Indicate custom layout.
                xml = null;
                break;
            }

            return(xml);
        }
        static KeyboardLayout GetKeyboardLayout(IKeyboardHost host, KeyboardLayoutName name)
        {
            var layoutXml = GetKeyboardLayoutXml(name);

            if (layoutXml == null)
            {
                try
                {
                    var myDocuments = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                    var fileName    = "KeyboardLayout.xml";
                    var path        = Path.Combine(myDocuments, fileName);

                    layoutXml = File.ReadAllText(path);
                }
                catch (Exception ex)
                {
                    host.ShowException("Error loading custom keyboard", ex);

                    layoutXml = GetKeyboardLayoutXml(KeyboardLayoutName.Default);
                }
            }

            KeyboardLayout layout;

            try
            {
                layout = KeyboardLayout.Load(layoutXml);
            }
            catch (Exception ex)
            {
                host.ShowException("Error parsing custom keyboard", ex);

                layoutXml = GetKeyboardLayoutXml(KeyboardLayoutName.Default);
                layout    = KeyboardLayout.Load(layoutXml);
            }

            return(layout);
        }