1default partial xkb_types "default" {
2
3    // Defines types with an eight-level shift, similar to the three-level
4    // type used for iso9995, but it lets the Shift key behave "normally".
5
6    virtual_modifiers  LevelThree, LevelFive;
7
8    type "EIGHT_LEVEL" {
9	modifiers = Shift + LevelThree + LevelFive;
10	map[None] = Level1;
11	map[Shift] = Level2;
12	map[LevelThree] = Level3;
13	map[Shift+LevelThree] = Level4;
14	map[LevelFive] = Level5;
15	map[Shift+LevelFive] = Level6;
16	map[LevelThree+LevelFive] = Level7;
17	map[Shift+LevelThree+LevelFive] = Level8;
18	level_name[Level1] = "Base";
19	level_name[Level2] = "Shift";
20	level_name[Level3] = "Alt Base";
21	level_name[Level4] = "Shift Alt";
22	level_name[Level5] = "X";
23	level_name[Level6] = "X Shift";
24	level_name[Level7] = "X Alt Base";
25	level_name[Level8] = "X Shift Alt";
26    };
27
28    type "EIGHT_LEVEL_ALPHABETIC" {
29	modifiers = Shift + Lock + LevelThree + LevelFive;
30	map[None] = Level1;
31	map[Shift] = Level2;
32	map[Lock] = Level2;
33	map[Shift+Lock] = Level1;
34	map[LevelThree] = Level3;
35	map[Shift+LevelThree] = Level4;
36	map[Lock+LevelThree] = Level4;
37	map[Shift+Lock+LevelThree] = Level3;
38
39	map[LevelFive] = Level5;
40	map[Shift+LevelFive] = Level6;
41	map[Lock+LevelFive] = Level6;
42	map[Shift+Lock+LevelFive] = Level5;
43	map[LevelThree+LevelFive] = Level7;
44	map[Shift+LevelThree+LevelFive] = Level8;
45	map[Lock+LevelThree+LevelFive] = Level8;
46	map[Shift+Lock+LevelThree+LevelFive] = Level7;
47
48	level_name[Level1] = "Base";
49	level_name[Level2] = "Shift";
50	level_name[Level3] = "Alt Base";
51	level_name[Level4] = "Shift Alt";
52	level_name[Level5] = "X";
53	level_name[Level6] = "X Shift";
54	level_name[Level7] = "X Alt Base";
55	level_name[Level8] = "X Shift Alt";
56    };
57
58    type "EIGHT_LEVEL_SEMIALPHABETIC" {
59	modifiers = Shift + Lock + LevelThree + LevelFive;
60	map[None] = Level1;
61	map[Shift] = Level2;
62	map[Lock] = Level2;
63	map[Shift+Lock] = Level1;
64	map[LevelThree] = Level3;
65	map[Shift+LevelThree] = Level4;
66	map[Lock+LevelThree] = Level3;
67	map[Shift+Lock+LevelThree] = Level4;
68
69	map[LevelFive] = Level5;
70	map[Shift+LevelFive] = Level6;
71	map[Lock+LevelFive] = Level6;
72	map[Shift+Lock+LevelFive] = Level5;
73	map[LevelThree+LevelFive] = Level7;
74	map[Shift+LevelThree+LevelFive] = Level8;
75	map[Lock+LevelThree+LevelFive] = Level7;
76	map[Shift+Lock+LevelThree+LevelFive] = Level8;
77
78	preserve[Lock+LevelThree] = Lock;
79	preserve[Shift+Lock+LevelThree] = Lock;
80	preserve[Lock+LevelThree+LevelFive] = Lock;
81	preserve[Shift+Lock+LevelThree+LevelFive] = Lock;
82
83	level_name[Level1] = "Base";
84	level_name[Level2] = "Shift";
85	level_name[Level3] = "Alt Base";
86	level_name[Level4] = "Shift Alt";
87	level_name[Level5] = "X";
88	level_name[Level6] = "X Shift";
89	level_name[Level7] = "X Alt Base";
90	level_name[Level8] = "X Shift Alt";
91    };
92
93    type "EIGHT_LEVEL_LEVEL_FIVE_LOCK" {
94	// Level5-Lock is implemented with virtual modifier NumLock.
95
96	modifiers = Shift + Lock + LevelThree + LevelFive + NumLock;
97
98	map[None]                                    = Level1;
99	map[Shift]                                   = Level2;
100	map[LevelThree]                              = Level3;
101	map[LevelThree+Shift]                        = Level4;
102
103	map[LevelFive]                               = Level5;
104	map[LevelFive+Shift]                         = Level6;
105	map[LevelFive+LevelThree]                    = Level7;
106	map[LevelFive+LevelThree+Shift]              = Level8;
107
108	map[NumLock]                                 = Level5;
109	map[NumLock+Shift]                           = Level6;
110	map[NumLock+LevelThree]                      = Level7;
111	map[NumLock+LevelThree+Shift]                = Level8;
112
113	map[NumLock+LevelFive]                       = Level1;
114	map[NumLock+LevelFive+Shift]                 = Level2;
115	map[NumLock+LevelFive+LevelThree]            = Level3;
116	map[NumLock+LevelFive+LevelThree+Shift]      = Level4;
117
118	// Lock has no effect
119	map[Lock]                                    = Level1;
120	map[Lock+Shift]                              = Level2;
121	map[Lock+LevelThree]                         = Level3;
122	map[Lock+LevelThree+Shift]                   = Level4;
123
124	map[Lock+LevelFive]                          = Level5;
125	map[Lock+LevelFive+Shift]                    = Level6;
126	map[Lock+LevelFive+LevelThree]               = Level7;
127	map[Lock+LevelFive+LevelThree+Shift]         = Level8;
128
129	map[Lock+NumLock]                            = Level5;
130	map[Lock+NumLock+Shift]                      = Level6;
131	map[Lock+NumLock+LevelThree]                 = Level7;
132	map[Lock+NumLock+LevelThree+Shift]           = Level8;
133
134	map[Lock+NumLock+LevelFive]                  = Level1;
135	map[Lock+NumLock+LevelFive+Shift]            = Level2;
136	map[Lock+NumLock+LevelFive+LevelThree]       = Level3;
137	map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level4;
138
139	preserve[LevelFive+Shift] = Shift;
140	preserve[NumLock+Shift] = Shift;
141	preserve[Lock+LevelFive+Shift] = Shift;
142	preserve[Lock+NumLock+Shift] = Shift;
143
144	level_name[Level1] = "Base";
145	level_name[Level2] = "Shift";
146	level_name[Level3] = "Alt Base";
147	level_name[Level4] = "Shift Alt";
148	level_name[Level5] = "X";
149	level_name[Level6] = "X Shift";
150	level_name[Level7] = "X Alt Base";
151	level_name[Level8] = "X Shift Alt";
152    };
153
154    type "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK" {
155	// Level5-Lock is implemented with virtual modifier NumLock.
156
157	modifiers = Shift + Lock + LevelThree + LevelFive + NumLock;
158
159	map[None]                                    = Level1;
160	map[Shift]                                   = Level2;
161	map[LevelThree]                              = Level3;
162	map[LevelThree+Shift]                        = Level4;
163
164	map[LevelFive]                               = Level5;
165	map[LevelFive+Shift]                         = Level6;
166	map[LevelFive+LevelThree]                    = Level7;
167	map[LevelFive+LevelThree+Shift]              = Level8;
168
169	map[NumLock]                                 = Level5;
170	map[NumLock+Shift]                           = Level6;
171	map[NumLock+LevelThree]                      = Level7;
172	map[NumLock+LevelThree+Shift]                = Level8;
173
174	map[NumLock+LevelFive]                       = Level1;
175	map[NumLock+LevelFive+Shift]                 = Level2;
176	map[NumLock+LevelFive+LevelThree]            = Level3;
177	map[NumLock+LevelFive+LevelThree+Shift]      = Level4;
178
179	// Lock interchanges Level1 and Level2
180	map[Lock]                                    = Level2;
181	map[Lock+Shift]                              = Level1;
182	map[Lock+LevelThree]                         = Level3;
183	map[Lock+LevelThree+Shift]                   = Level4;
184
185	map[Lock+LevelFive]                          = Level5;
186	map[Lock+LevelFive+Shift]                    = Level6;
187	map[Lock+LevelFive+LevelThree]               = Level7;
188	map[Lock+LevelFive+LevelThree+Shift]         = Level8;
189
190	map[Lock+NumLock]                            = Level5;
191	map[Lock+NumLock+Shift]                      = Level6;
192	map[Lock+NumLock+LevelThree]                 = Level7;
193	map[Lock+NumLock+LevelThree+Shift]           = Level8;
194
195	map[Lock+NumLock+LevelFive]                  = Level2;
196	map[Lock+NumLock+LevelFive+Shift]            = Level1;
197	map[Lock+NumLock+LevelFive+LevelThree]       = Level4;
198	map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level3;
199
200	preserve[LevelFive+Shift] = Shift;
201	preserve[NumLock+Shift] = Shift;
202
203	level_name[Level1] = "Base";
204	level_name[Level2] = "Shift";
205	level_name[Level3] = "Alt Base";
206	level_name[Level4] = "Shift Alt";
207	level_name[Level5] = "X";
208	level_name[Level6] = "X Shift";
209	level_name[Level7] = "X Alt Base";
210	level_name[Level8] = "X Shift Alt";
211    };
212
213};
214