1// Let Space key provide No-Break Space (NBSP), Narrow No-Break Space (NNBSP),
2// Zero-Width Non-Joiner (ZWNJ), and Zero-Width Joiner (ZWJ) for the desired
3// levels.
4
5
6////////////////////////////////////////
7// Only Space
8
9partial
10xkb_symbols "none" {
11  key <SPCE> {
12    type[Group1]="ONE_LEVEL",
13    symbols[Group1]= [ space ]
14  };
15};
16
17
18////////////////////////////////////////
19// No-Break Space
20
21partial
22xkb_symbols "level2" {
23  key <SPCE> {
24    type[Group1]="TWO_LEVEL",
25    symbols[Group1]= [ space, nobreakspace ]
26  };
27};
28
29
30// level3 & level3ns provide no-breaking spaces starting from level3
31// This is good for typographers but experience shows many users accidently
32// type no-breaking spaces on the CLI (resulting in errors)
33partial
34xkb_symbols "level3" {
35  key <SPCE> {
36    type[Group1]="FOUR_LEVEL",
37    symbols[Group1]= [ space, space, nobreakspace ]
38  };
39};
40
41// for this reason pushing no-breaking spaces to level4 is the safe default nowadays
42partial
43xkb_symbols "level4" {
44  key <SPCE> {
45    type[Group1]="FOUR_LEVEL",
46    symbols[Group1]= [ space, space, space, nobreakspace ]
47  };
48};
49
50
51////////////////////////////////////////
52// Narrow No-Break Space
53
54// level3n provides narrow no-breaking space in addition to the normal one
55partial
56xkb_symbols "level3n" {
57  key <SPCE> {
58    type[Group1]="FOUR_LEVEL",
59    symbols[Group1]= [ space, space, nobreakspace, 0x100202F ]
60  };
61};
62
63// level4n provides narrow no-breaking space in addition to the normal one
64partial
65xkb_symbols "level4n" {
66 key <SPCE> {
67   type[Group1]="EIGHT_LEVEL",
68   symbols[Group1]= [ space, space, space, nobreakspace, space, 0x100202F, NoSymbol, NoSymbol ]
69 };
70};
71
72// level4nl provides narrow no-breaking space in addition to the normal one
73// without forcing the use of level5 for mostly four-level layouts
74// Used by fr(oss), be(oss)…
75partial
76xkb_symbols "level4nl" {
77 key <SPCE> {
78   type[Group1]="LOCAL_EIGHT_LEVEL",
79   symbols[Group1]= [ space, space, space, nobreakspace, space, 0x100202F, NoSymbol, NoSymbol ]
80 };
81};
82
83
84////////////////////////////////////////
85// Zero-Width Non-Joiner & Zero-Width Joiner
86// Author: Behnam Esfahbod <behnam@esfahbod.info>
87
88// ZWNJ and ZWJ are widely used in Persian, Kurdinsh, Pashto, Uzbek and other
89// languages that use PersoArabic script.
90
91
92// ZWNJ on level 2
93partial
94xkb_symbols "zwnj2" {
95  key <SPCE> {
96    type[Group1]="TWO_LEVEL",
97    symbols[Group1]= [ space, 0x100200c ]
98  };
99};
100
101
102// ZWNJ on level 2
103// ZWJ on level 3
104partial
105xkb_symbols "zwnj2zwj3" {
106  key <SPCE> {
107    type[Group1]="FOUR_LEVEL",
108    symbols[Group1]= [ space, 0x100200c, 0x100200d ]
109  };
110};
111
112
113// ZWNJ on level 2
114// ZWJ on level 3
115// NBSP on level 4
116partial
117xkb_symbols "zwnj2zwj3nb4" {
118  key <SPCE> {
119    type[Group1]="FOUR_LEVEL",
120    symbols[Group1]= [ space, 0x100200c, 0x100200d, nobreakspace ]
121  };
122};
123
124
125// ZWNJ on level 2
126// NBSP on level 3
127partial
128xkb_symbols "zwnj2nb3" {
129  key <SPCE> {
130    type[Group1]="FOUR_LEVEL",
131    symbols[Group1]= [ space, 0x100200c, nobreakspace ]
132  };
133};
134
135
136// ZWNJ on level 2
137// NBSP on level 3
138// ZWJ on level 4
139partial
140xkb_symbols "zwnj2nb3zwj4" {
141  key <SPCE> {
142    type[Group1]="FOUR_LEVEL",
143    symbols[Group1]= [ space, 0x100200c, nobreakspace, 0x100200d ]
144  };
145};
146
147
148// ZWNJ on level 2
149// NBSP on level 3
150// NNBSP on level 4
151// Used by ir(pes)
152partial
153xkb_symbols "zwnj2nb3nnb4" {
154  key <SPCE> {
155    type[Group1]="FOUR_LEVEL",
156    symbols[Group1]= [ space, 0x100200c, nobreakspace, 0x100202F ]
157  };
158};
159
160
161// ZWNJ on level 3
162// ZWJ on level 4
163// Used by in(deva), in(olpc)
164partial
165xkb_symbols "zwnj3zwj4" {
166  key <SPCE> {
167    type[Group1]="FOUR_LEVEL",
168    symbols[Group1]= [ space, space, 0x100200c, 0x100200d ]
169  };
170};
171
172
173// NBSP on level 2
174// ZWNJ on level 3
175// Used by lk(sin_phonetic)
176partial
177xkb_symbols "nb2zwnj3s" {
178  key <SPCE> {
179    type[Group1]="FOUR_LEVEL",
180    symbols[Group1]= [ space, nobreakspace, 0x100200c, NoSymbol ]
181  };
182};
183