1default partial xkb_types "default" {
2
3    // Defines a type 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,ScrollLock,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[LevelThree] = Level3;
34	map[Shift+LevelThree] = Level4;
35	map[Lock+LevelThree] =  Level4;
36	map[Lock+Shift+LevelThree] = Level3;
37
38	map[LevelFive] = Level5;
39	map[Shift+LevelFive] = Level6;
40	map[Lock+LevelFive]  = Level6;
41	map[LevelThree+LevelFive] = Level7;
42	map[Shift+LevelThree+LevelFive] = Level8;
43	map[Lock+LevelThree+LevelFive] =  Level8;
44	map[Lock+Shift+LevelThree+LevelFive] = Level7;
45
46	level_name[Level1] = "Base";
47	level_name[Level2] = "Shift";
48	level_name[Level3] = "Alt Base";
49	level_name[Level4] = "Shift Alt";
50	level_name[Level5] = "X";
51	level_name[Level6] = "X Shift";
52	level_name[Level7] = "X Alt Base";
53	level_name[Level8] = "X Shift Alt";
54    };
55
56    type "EIGHT_LEVEL_LEVEL_FIVE_LOCK" {
57      // Level5-Lock is implemented by using NumLock, because a real modifier
58      // is required.
59
60        modifiers = Shift + Lock + LevelThree + NumLock + LevelFive;
61
62        map[None]                                    = Level1;
63        map[Shift]                                   = Level2;
64        map[LevelThree]                              = Level3;
65        map[LevelThree+Shift]                        = Level4;
66
67        map[LevelFive]                               = Level5;
68        map[LevelFive+Shift]                         = Level6;
69        map[LevelFive+LevelThree]                    = Level7;
70        map[LevelFive+LevelThree+Shift]              = Level8;
71
72        map[NumLock]                                 = Level5;
73        map[NumLock+Shift]                           = Level6;
74        map[NumLock+LevelThree]                      = Level7;
75        map[NumLock+LevelThree+Shift]                = Level8;
76
77        map[NumLock+LevelFive]                       = Level1;
78        map[NumLock+LevelFive+Shift]                 = Level2;
79        map[NumLock+LevelFive+LevelThree]            = Level3;
80        map[NumLock+LevelFive+LevelThree+Shift]      = Level4;
81
82        // Lock has no effect
83        map[Lock]                                    = Level1;
84        map[Lock+Shift]                              = Level2;
85        map[Lock+LevelThree]                         = Level3;
86        map[Lock+LevelThree+Shift]                   = Level4;
87
88        map[Lock+LevelFive]                          = Level5;
89        map[Lock+LevelFive+Shift]                    = Level6;
90        map[Lock+LevelFive+LevelThree]               = Level7;
91        map[Lock+LevelFive+LevelThree+Shift]         = Level8;
92
93        map[Lock+NumLock]                            = Level5;
94        map[Lock+NumLock+Shift]                      = Level6;
95        map[Lock+NumLock+LevelThree]                 = Level7;
96        map[Lock+NumLock+LevelThree+Shift]           = Level8;
97
98        map[Lock+NumLock+LevelFive]                  = Level1;
99        map[Lock+NumLock+LevelFive+Shift]            = Level2;
100        map[Lock+NumLock+LevelFive+LevelThree]       = Level3;
101        map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level4;
102
103        preserve[LevelFive+Shift] = Shift;
104        preserve[NumLock+Shift] = Shift;
105        preserve[Lock+LevelFive+Shift] = Shift;
106        preserve[Lock+NumLock+Shift] = Shift;
107
108        level_name[Level1] = "Base";
109        level_name[Level2] = "Shift";
110        level_name[Level3] = "Alt Base";
111        level_name[Level4] = "Shift Alt";
112        level_name[Level5] = "X";
113        level_name[Level6] = "X Shift";
114        level_name[Level7] = "X Alt Base";
115        level_name[Level8] = "X Shift Alt";
116    };
117
118    type "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK" {
119      // Level5-Lock is implemented by using NumLock, because a real modifier
120      // is required.
121
122        modifiers = Shift + Lock + LevelThree + NumLock + LevelFive;
123
124        map[None]                                    = Level1;
125        map[Shift]                                   = Level2;
126        map[LevelThree]                              = Level3;
127        map[LevelThree+Shift]                        = Level4;
128
129        map[LevelFive]                               = Level5;
130        map[LevelFive+Shift]                         = Level6;
131        map[LevelFive+LevelThree]                    = Level7;
132        map[LevelFive+LevelThree+Shift]              = Level8;
133
134        map[NumLock]                                 = Level5;
135        map[NumLock+Shift]                           = Level6;
136        map[NumLock+LevelThree]                      = Level7;
137        map[NumLock+LevelThree+Shift]                = Level8;
138
139        map[NumLock+LevelFive]                       = Level1;
140        map[NumLock+LevelFive+Shift]                 = Level2;
141        map[NumLock+LevelFive+LevelThree]            = Level3;
142        map[NumLock+LevelFive+LevelThree+Shift]      = Level4;
143
144        // Lock interchanges Level1 and Level2
145        map[Lock]                                    = Level2;
146        map[Lock+Shift]                              = Level1;
147        map[Lock+LevelThree]                         = Level3;
148        map[Lock+LevelThree+Shift]                   = Level4;
149
150        map[Lock+LevelFive]                          = Level5;
151        map[Lock+LevelFive+Shift]                    = Level6;
152        map[Lock+LevelFive+LevelThree]               = Level7;
153        map[Lock+LevelFive+LevelThree+Shift]         = Level8;
154
155        map[Lock+NumLock]                            = Level5;
156        map[Lock+NumLock+Shift]                      = Level6;
157        map[Lock+NumLock+LevelThree]                 = Level7;
158        map[Lock+NumLock+LevelThree+Shift]           = Level8;
159
160        map[Lock+NumLock+LevelFive]                  = Level2;
161        map[Lock+NumLock+LevelFive+Shift]            = Level1;
162        map[Lock+NumLock+LevelFive+LevelThree]       = Level4;
163        map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level3;
164
165        preserve[LevelFive+Shift] = Shift;
166        preserve[NumLock+Shift] = Shift;
167
168        level_name[Level1] = "Base";
169        level_name[Level2] = "Shift";
170        level_name[Level3] = "Alt Base";
171        level_name[Level4] = "Shift Alt";
172        level_name[Level5] = "X";
173        level_name[Level6] = "X Shift";
174        level_name[Level7] = "X Alt Base";
175        level_name[Level8] = "X Shift Alt";
176    };
177
178    type "EIGHT_LEVEL_SEMIALPHABETIC" {
179	modifiers = Shift+Lock+LevelThree+LevelFive;
180	map[None] = Level1;
181	map[Shift] = Level2;
182	map[Lock]  = Level2;
183	map[LevelThree] = Level3;
184	map[Shift+LevelThree] = Level4;
185	map[Lock+LevelThree] =  Level3;
186	map[Lock+Shift+LevelThree] = Level4;
187
188	map[LevelFive] = Level5;
189	map[Shift+LevelFive] = Level6;
190	map[Lock+LevelFive]  = Level6;
191	map[Lock+Shift+LevelFive]  = Level6;
192	map[LevelThree+LevelFive] = Level7;
193	map[Shift+LevelThree+LevelFive] = Level8;
194	map[Lock+LevelThree+LevelFive] =  Level7;
195	map[Lock+Shift+LevelThree+LevelFive] = Level8;
196
197	preserve[Lock+LevelThree] = Lock;
198	preserve[Lock+Shift+LevelThree] = Lock;
199	preserve[Lock+LevelFive] = Lock;
200	preserve[Lock+Shift+LevelFive] = Lock;
201	preserve[Lock+LevelThree+LevelFive] = Lock;
202	preserve[Lock+Shift+LevelThree+LevelFive] = Lock;
203
204	level_name[Level1] = "Base";
205	level_name[Level2] = "Shift";
206	level_name[Level3] = "Alt Base";
207	level_name[Level4] = "Shift Alt";
208	level_name[Level5] = "X";
209	level_name[Level6] = "X Shift";
210	level_name[Level7] = "X Alt Base";
211	level_name[Level8] = "X Shift Alt";
212    };
213
214};
215