aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan <fauxpark@gmail.com>2020-05-14 04:34:31 +1000
committerGitHub <noreply@github.com>2020-05-13 19:34:31 +0100
commit741c7d5eec7deb89a0043852ad711917137a5e61 (patch)
tree6c7bba6c7312ea6cc42a3e23ce7993b11c436a49
parentf3c30e80cc4478ec48d49eba793ccca6ed950852 (diff)
downloadqmk_firmware-741c7d5eec7deb89a0043852ad711917137a5e61.tar.gz
qmk_firmware-741c7d5eec7deb89a0043852ad711917137a5e61.zip
Update Canadian Multilingual keymap and add sendstring LUT (#8786)
-rw-r--r--quantum/keymap_extras/keymap_canadian_multilingual.h646
-rw-r--r--quantum/keymap_extras/sendstring_canadian_multilingual.h100
2 files changed, 510 insertions, 236 deletions
diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h
index 4fc174e73..d980dc2e4 100644
--- a/quantum/keymap_extras/keymap_canadian_multilingual.h
+++ b/quantum/keymap_extras/keymap_canadian_multilingual.h
@@ -1,4 +1,4 @@
1/* Copyright 2016 Didier Loiseau 1/* Copyright 2020
2 * 2 *
3 * This program is free software: you can redistribute it and/or modify 3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by 4 * it under the terms of the GNU General Public License as published by
@@ -13,247 +13,421 @@
13 * You should have received a copy of the GNU General Public License 13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */ 15 */
16#ifndef KEYMAP_CANADIAN_MULTILINGUAL_H
17#define KEYMAP_CANADIAN_MULTILINGUAL_H
18 16
19#include "keymap.h" 17#pragma once
20
21#ifndef GR2A
22# define GR2A(kc) RCTL(kc)
23#endif
24
25// Normal characters
26// First row
27#define CSA_SLASH KC_GRV // /
28#define CSA_SLSH CSA_SLASH
29
30// Second row
31#define CSA_DEAD_CIRCUMFLEX KC_LBRACKET // dead ^
32#define CSA_DCRC CSA_DEAD_CIRCUMFLEX
33#define CSA_C_CEDILLA KC_RBRACKET // Ç
34#define CSA_CCED CSA_C_CEDILLA
35
36// Third row
37#define CSA_E_GRAVE KC_QUOT // è
38#define CSA_EGRV CSA_E_GRAVE
39#define CSA_A_GRAVE KC_BSLASH // à
40#define CSA_AGRV CSA_A_GRAVE
41
42// Fourth row
43#define CSA_U_GRAVE KC_NONUS_BSLASH // ù
44#define CSA_UGRV CSA_U_GRAVE
45#define CSA_E_ACUTE KC_SLSH // é
46#define CSA_ECUT CSA_E_ACUTE
47
48// Shifted characters
49// First row
50#define CSA_BACKSLASH LSFT(CSA_SLASH) /* \ */
51#define CSA_BSLS CSA_BACKSLASH
52#define CSA_QUESTION LSFT(KC_6) // ?
53#define CSA_QEST CSA_QUESTION
54
55// Second row
56#define CSA_DEAD_TREMA LSFT(CSA_DEAD_CIRCUMFLEX) // dead trema/umlaut/diaresis for ä ë ï ö ü
57#define CSA_DTRM CSA_DEAD_TREMA
58
59// Third row
60// all same as US-QWERTY, or capitalised character of the non-shifted key
61
62// Fourth row
63#define CSA_APOSTROPHE LSFT(KC_COMMA) // '
64#define CSA_APOS CSA_APOSTROPHE
65#define CSA_DOUBLE_QUOTE LSFT(KC_DOT) // "
66#define CSA_DQOT CSA_DOUBLE_QUOTE
67
68// Alt Gr-ed characters
69// First row
70#define CSA_PIPE ALGR(CSA_SLASH) // |
71#define CSA_CURRENCY ALGR(KC_4) // ¤
72#define CSA_CURR CSA_CURRENCY
73#define CSA_LEFT_CURLY_BRACE ALGR(KC_7) // {
74#define CSA_LCBR CSA_LEFT_CURLY_BRACE
75#define CSA_RIGHT_CURLY_BRACE ALGR(KC_8) // }
76#define CSA_RCBR CSA_RIGHT_CURLY_BRACE
77#define CSA_LBRACKET ALGR(KC_9) // [
78#define CSA_LBRC CSA_LBRACKET
79#define CSA_RBRACKET ALGR(KC_0) // ]
80#define CSA_RBRC CSA_RBRACKET
81#define CSA_NEGATION ALGR(KC_EQUAL) // ¬
82#define CSA_NEGT CSA_NEGATION
83 18
84// Second row 19#include "keymap.h"
85// euro symbol not available on Linux? (X.org)
86#define CSA_EURO ALGR(KC_E) // €
87#define CSA_DEAD_GRAVE ALGR(CSA_DEAD_CIRCUMFLEX)
88#define CSA_DGRV CSA_DEAD_GRAVE // dead `
89#define CSA_DEAD_TILDE ALGR(CSA_C_CEDILLA) // ~
90#define CSA_DTLD CSA_DEAD_TILDE
91
92// Third row
93#define CSA_DEGREE ALGR(KC_SCOLON) // °
94#define CSA_DEGR CSA_DEGREE
95
96// Fourth row
97#define CSA_LEFT_GUILLEMET ALGR(KC_Z) // «
98#define CSA_LGIL CSA_LEFT_GUILLEMET
99#define CSA_RIGHT_GUILLEMET ALGR(KC_X) // »
100#define CSA_RGIL CSA_RIGHT_GUILLEMET
101#define CSA_LESS ALGR(KC_COMMA) // <
102#define CSA_GREATER ALGR(KC_DOT) // >
103#define CSA_GRTR CSA_GREATER
104
105// Space bar
106#define CSA_NON_BREAKING_SPACE ALGR(KC_SPACE)
107#define CSA_NBSP CSA_NON_BREAKING_SPACE
108
109// GR2A-ed characters
110// First row
111#define CSA_SUPERSCRIPT_ONE GR2A(KC_1) // ¹
112#define CSA_SUP1 CSA_SUPERSCRIPT_ONE
113#define CSA_SUPERSCRIPT_TWO GR2A(KC_2) // ²
114#define CSA_SUP2 CSA_SUPERSCRIPT_TWO
115#define CSA_SUPERSCRIPT_THREE GR2A(KC_3) // ³
116#define CSA_SUP3 CSA_SUPERSCRIPT_THREE
117#define CSA_ONE_QUARTER GR2A(KC_4) // ¼
118#define CSA_1QRT CSA_ONE_QUARTER
119#define CSA_ONE_HALF GR2A(KC_5) // ½
120#define CSA_1HLF CSA_ONE_HALF
121#define CSA_THREE_QUARTERS GR2A(KC_6) // ¾
122#define CSA_3QRT CSA_THREE_QUARTERS
123// nothing on 7-0 and -
124#define CSA_DEAD_CEDILLA GR2A(KC_EQUAL) // dead ¸
125#define CSA_DCED CSA_DEAD_CEDILLA
126
127// Second row
128#define CSA_OMEGA GR2A(KC_Q) // ω
129#define CSA_OMEG CSA_OMEGA
130#define CSA_L_STROKE GR2A(KC_W) // ł
131#define CSA_LSTK CSA_L_STROKE
132#define CSA_OE_LIGATURE GR2A(KC_E) // œ
133#define CSA_OE CSA_OE_LIGATURE
134#define CSA_PARAGRAPH GR2A(KC_R) // ¶
135#define CSA_PARG CSA_PARAGRAPH
136#define CSA_T_STROKE GR2A(KC_T) // ŧ
137#define CSA_LEFT_ARROW GR2A(KC_Y) // ←
138#define CSA_LARW CSA_LEFT_ARROW
139#define CSA_DOWN_ARROW GR2A(KC_U) // ↓
140#define CSA_DARW CSA_DOWN_ARROW
141#define CSA_RIGHT_ARROW GR2A(KC_I) // →
142#define CSA_RARW CSA_RIGHT_ARROW
143#define CSA_O_STROKE GR2A(KC_O) // ø
144#define CSA_OSTK CSA_O_STROKE
145#define CSA_THORN GR2A(KC_P) // þ
146#define CSA_THRN CSA_THORN
147// nothing on ^
148#define CSA_TILDE GR2A(CSA_C_CEDILLA) // dead ~
149#define CSA_TILD CSA_TILDE
150 20
151// Third row 21// clang-format off
152#define CSA_AE_LIGATURE GR2A(KC_A) // æ
153#define CSA_AE CSA_AE_LIGATURE
154#define CSA_SHARP_S GR2A(KC_S) // ß
155#define CSA_SRPS CSA_SHARP_S
156#define CSA_ETH GR2A(KC_D) // ð
157// nothing on F
158#define CSA_ENG GR2A(KC_G) // ŋ
159#define CSA_H_SRTOKE GR2A(KC_H) // ħ
160#define CSA_HSTK CSA_H_SRTOKE
161#define CSA_IJ_LIGATURE GR2A(KC_J) // ij
162#define CSA_IJ CSA_IJ_LIGATURE
163#define CSA_KRA GR2A(KC_K) // ĸ
164#define CSA_L_FLOWN_DOT GR2A(KC_L) // ŀ
165#define CSA_LFLD CSA_L_FLOWN_DOT
166#define CSA_DEAD_ACUTE GR2A(KC_SCLN) // dead acute accent
167#define CSA_DACT CSA_DEAD_ACUTE
168// nothing on È & À
169 22
170// Fourth row 23/*
171#define CSA_CENT GR2A(KC_C) // ¢ 24 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
172#define CSA_LEFT_DOUBLE_QUOTE GR2A(KC_V) // “ 25 * │ / │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
173#define CSA_LDQT CSA_LEFT_DOUBLE_QUOTE 26 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
174#define CSA_RIGHT_DOUBLE_QUOTE GR2A(KC_B) // ” 27 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ Ç │     │
175#define CSA_RDQT CSA_RIGHT_DOUBLE_QUOTE 28 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
176#define CSA_N_APOSTROPHE GR2A(KC_N) // ʼn (deprecated unicode codepoint) 29 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ È │ À │    │
177#define CSA_NAPO CSA_N_APOSTROPHE 30 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
178#define CSA_MU GR2A(KC_M) // μ 31 * │    │ Ù │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ É │          │
179#define CSA_HORIZONTAL_BAR GR2A(KC_COMMA) // ― 32 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
180#define CSA_HZBR CSA_HORIZONTAL_BAR 33 * │    │    │    │                        │    │    │    │    │
181#define CSA_DEAD_DOT_ABOVE GR2A(KC_DOT) // dead ˙ 34 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
182#define CSA_DDTA CSA_DEAD_DOT_ABOVE 35 */
36// Row 1
37#define CA_SLSH KC_GRV // /
38#define CA_1 KC_1 // 1
39#define CA_2 KC_2 // 2
40#define CA_3 KC_3 // 3
41#define CA_4 KC_4 // 4
42#define CA_5 KC_5 // 5
43#define CA_6 KC_6 // 6
44#define CA_7 KC_7 // 7
45#define CA_8 KC_8 // 8
46#define CA_9 KC_9 // 9
47#define CA_0 KC_0 // 0
48#define CA_MINS KC_MINS // -
49#define CA_EQL KC_EQL // =
50// Row 2
51#define CA_Q KC_Q // Q
52#define CA_W KC_W // W
53#define CA_E KC_E // E
54#define CA_R KC_R // R
55#define CA_T KC_T // T
56#define CA_Y KC_Y // Y
57#define CA_U KC_U // U
58#define CA_I KC_I // I
59#define CA_O KC_O // O
60#define CA_P KC_P // P
61#define CA_CIRC KC_LBRC // ^ (dead)
62#define CA_CCED KC_RBRC // Ç
63// Row 3
64#define CA_A KC_A // A
65#define CA_S KC_S // S
66#define CA_D KC_D // D
67#define CA_F KC_F // F
68#define CA_G KC_G // G
69#define CA_H KC_H // H
70#define CA_J KC_J // J
71#define CA_K KC_K // K
72#define CA_L KC_L // L
73#define CA_SCLN KC_SCLN // ;
74#define CA_EGRV KC_QUOT // É
75#define CA_AGRV KC_NUHS // À
76// Row 4
77#define CA_UGRV KC_NUBS // Ù
78#define CA_Z KC_Z // Z
79#define CA_X KC_X // X
80#define CA_C KC_C // C
81#define CA_V KC_V // V
82#define CA_B KC_B // B
83#define CA_N KC_N // N
84#define CA_M KC_M // M
85#define CA_COMM KC_COMM // ,
86#define CA_DOT KC_DOT // .
87#define CA_EACU KC_SLSH // É
183 88
184// GR2A-shifted characters (different from capitalised GR2A-ed characters) 89/* Shifted symbols
185// First row 90 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
186#define CSA_SOFT_HYPHEN GR2A(LSFT(CSA_SLASH)) // soft-hyphen, appears as a hyphen in wrapped word 91 * │ \ │ ! │ @ │ # │ $ │ % │ ? │ & │ * │ ( │ ) │ _ │ + │       │
187#define CSA_SHYP CSA_SOFT_HYPHEN 92 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
188#define CSA_INVERTED_EXCLAIM GR2A(KC_EXCLAIM) // ¡ 93 * │     │   │   │   │   │   │   │   │   │   │   │ ¨ │   │     │
189#define CSA_IXLM CSA_INVERTED_EXCLAIM 94 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
190// nothing on 2 95 * │      │   │   │   │   │   │   │   │   │   │ : │   │   │    │
191#define CSA_POUND GR2A(LSFT(KC_3)) // £ 96 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
192#define CSA_GBP CSA_POUND_SIGN 97 * │    │   │   │   │   │   │   │   │   │ ' │ " │   │          │
193// already on ALGR(KC_E) 98 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
194#define CSA_EURO_BIS GR2A(LSFT(KC_4)) // € 99 * │    │    │    │                        │    │    │    │    │
195#define CSA_EURB CSA_EURO_BIS 100 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
196#define CSA_THREE_EIGHTHS GR2A(LSFT(KC_5)) // ⅜ 101 */
197#define CSA_3ON8 CSA_THREE_EIGHTHS 102// Row 1
198#define CSA_FIVE_EIGHTHS GR2A(LSFT(KC_6)) // ⅝ 103#define CA_BSLS S(CA_SLSH) // (backslash)
199#define CSA_5ON8 CSA_FIVE_EIGHTHS 104#define CA_EXLM S(CA_1) // !
200#define CSA_SEVEN_EIGHTHS GR2A(LSFT(KC_7)) // ⅞ 105#define CA_AT S(CA_2) // @
201#define CSA_7ON8 CSA_SEVEN_EIGHTHS 106#define CA_HASH S(CA_3) // #
202#define CSA_TRADEMARK GR2A(LSFT(KC_8)) // ™ 107#define CA_DLR S(CA_4) // $
203#define CSA_TM CSA_TRADEMARK 108#define CA_PERC S(CA_5) // %
204#define CSA_PLUS_MINUS GR2A(LSFT(KC_9)) // ± 109#define CA_QUES S(CA_6) // ?
205#define CSA_PSMS CSA_PLUS_MINUS 110#define CA_AMPR S(CA_7) // &
206// nothing on 0 111#define CA_ASTR S(CA_8) // *
207#define CSA_INVERTED_QUESTION GR2A(LSFT(KC_MINUS)) // ¿ 112#define CA_LPRN S(CA_9) // (
208#define CSA_IQST CSA_INVERTED_QUESTION 113#define CA_RPRN S(CA_0) // )
209#define CSA_DEAD_OGONEK GR2A(LSFT(KC_EQUAL)) // dead ˛ 114#define CA_UNDS S(CA_MINS) // _
210#define CSA_DOGO CSA_DEAD_OGONEK 115#define CA_PLUS S(CA_EQL) // +
116// Row 2
117#define CA_DIAE S(CA_CIRC) // ¨ (dead)
118// Row 3
119#define CA_COLN S(CA_SCLN) // :
120// Row 4
121#define CA_QUOT S(CA_COMM) // '
122#define CA_DQUO S(CA_DOT) // "
211 123
212// Second row 124/* AltGr symbols
213#define CSA_REGISTERED_TRADEMARK GR2A(LSFT(KC_R)) // ® 125 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
214#define CSA_RTM CSA_REGISTERED_TRADEMARK 126 * │ | │   │   │   │ ¤ │   │   │ { │ } │ [ │ ] │   │ ¬ │       │
215#define CSA_YEN GR2A(LSFT(KC_Y)) // ¥ 127 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
216#define CSA_YUAN CSA_YEN 128 * │     │   │   │ € │   │   │   │   │   │   │   │ ` │ ~ │     │
217#define CSA_UP_ARROW LSFT(CSA_DOWN_ARROW) // ↑ 129 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
218#define CSA_DOTLESS_I GR2A(LSFT(KC_I)) // ı 130 * │      │   │   │   │   │   │   │   │   │   │ ° │   │   │    │
219#define CSA_DLSI CSA_DOTLESS_I 131 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
220#define CSA_DEAD_RING GR2A(LSFT(CSA_DCRC)) // dead ° 132 * │    │   │ « │ » │   │   │   │   │   │ < │ > │   │          │
221#define CSA_DRNG CSA_DEAD_RING 133 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
222#define CSA_DEAD_MACRON GR2A(LSFT(CSA_C_CEDILLA)) // dead ¯ 134 * │    │    │    │                        │    │    │    │    │
223#define CSA_DMCR CSA_DEAD_MACRON 135 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
136 */
137// Row 1
138#define CA_PIPE ALGR(CA_SLSH) // |
139#define CA_CURR ALGR(CA_4) // ¤
140#define CA_LCBR ALGR(CA_7) // {
141#define CA_RCBR ALGR(CA_8) // }
142#define CA_LBRC ALGR(CA_9) // [
143#define CA_RBRC ALGR(CA_0) // ]
144#define CA_NOT ALGR(CA_EQL) // ¬
145// Row 2
146#define CA_EURO ALGR(CA_E) // €
147#define CA_GRV ALGR(CA_CIRC) // ` (dead)
148#define CA_DTIL ALGR(CA_CCED) // ~ (dead)
149// Row 3
150#define CA_DEG ALGR(CA_SCLN) // °
151// Row 4
152#define CA_LDAQ ALGR(CA_X) // «
153#define CA_RDAQ ALGR(CA_C) // »
154#define CA_LABK ALGR(CA_DOT) // <
155#define CA_RABK ALGR(CA_COMM) // >
224 156
225// Third row 157/* Right Ctrl symbols
226#define CSA_SECTION GR2A(LSFT(KC_S)) // § 158 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
227#define CSA_SECT CSA_SECTION 159 * │   │ ¹ │ ² │ ³ │ ¼ │ ½ │ ¾ │   │   │   │   │   │ ¸ │       │
228#define CSA_ORDINAL_INDICATOR_A GR2A(LSFT(KC_F)) // ª 160 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
229#define CSA_ORDA CSA_ORDINAL_INDICATOR_A 161 * │     │ Ω │ Ł │ Œ │ ¶ │ Ŧ │ ← │ ↓ │ → │ Ø │ Þ │   │ ~ │     │
230#define CSA_DEAD_DOUBLE_ACUTE LSFT(CSA_DEAD_ACUTE) // ˝ 162 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
231#define CSA_DDCT CSA_DEAD_DOUBLE_ACUTE 163 * │      │ Æ │ ß │ Ð │   │ Ŋ │ Ħ │ IJ │ ĸ │ Ŀ │ ´ │   │   │    │
232#define CSA_DEAD_CARON GR2A(LSFT(CSA_E_GRAVE)) // dead ˇ 164 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
233#define CSA_DCAR CSA_DEAD_CARON 165 * │    │   │   │   │ ¢ │ “ │ ” │ ʼn │ μ │ ― │ ˙ │   │          │
234#define CSA_DEAD_BREVE GR2A(LSFT(CSA_A_GRAVE)) // dead ˘ 166 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
235#define CSA_DBRV CSA_DEAD_BREVE 167 * │    │    │    │                        │    │    │    │    │
168 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
169 */
170// Row 1
171#define CA_SUP1 RCTL(CA_1) // ¹
172#define CA_SUP2 RCTL(CA_2) // ²
173#define CA_SUP3 RCTL(CA_3) // ³
174#define CA_QRTR RCTL(CA_4) // ¼
175#define CA_HALF RCTL(CA_5) // ½
176#define CA_TQTR RCTL(CA_6) // ¾
177#define CA_CEDL RCTL(CA_EQL) // ¸ (dead)
178// Row 2
179#define CA_OMEG RCTL(CA_Q) // Ω
180#define CA_LSTR RCTL(CA_W) // Ł
181#define CA_OE RCTL(CA_E) // Œ
182#define CA_PARA RCTL(CA_R) // ¶
183#define CA_TSTR RCTL(CA_T) // Ŧ
184#define CA_LARR RCTL(CA_Y) // ←
185#define CA_DARR RCTL(CA_U) // ↓
186#define CA_RARR RCTL(CA_I) // →
187#define CA_OSTR RCTL(CA_O) // Ø
188#define CA_THRN RCTL(CA_P) // Þ
189#define CA_TILD RCTL(CA_CCED) // ~
190// Row 3
191#define CA_AE RCTL(CA_A) // Æ
192#define CA_SS RCTL(CA_S) // ß
193#define CA_ETH RCTL(CA_D) // Ð
194#define CA_ENG RCTL(CA_G) // Ŋ
195#define CA_HSTR RCTL(CA_H) // Ħ
196#define CA_IJ RCTL(CA_J) // IJ
197#define CA_KRA RCTL(CA_K) // ĸ
198#define CA_LMDT RCTL(CA_L) // Ŀ
199#define CA_ACUT RCTL(CA_SCLN) // ´ (dead)
200// Row 4
201#define CA_CENT RCTL(CA_C) // ¢
202#define CA_LDQU RCTL(CA_V) // “
203#define CA_RDQU RCTL(CA_B) // ”
204#define CA_APSN RCTL(CA_N) // ʼn
205#define CA_MICR RCTL(CA_M) // μ
206#define CA_HRZB RCTL(CA_COMM) // ―
207#define CA_DOTA ALGR(CA_DOT) // ˙ (dead)
236 208
237// Fourth row 209/* Shift+Right Ctrl symbols
238#define CSA_BROKEN_PIPE GR2A(LSFT(CSA_U_GRAVE)) // ¦ 210 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
239#define CSA_BPIP CSA_BROKEN_PIPE 211 * │ - │ ¡ │   │ £ │   │ ⅜ │ ⅝ │ ⅞ │ ™ │ ± │   │ ¿ │ ˛ │       │
240#define CSA_COPYRIGHT GR2A(LSFT(KC_C)) // © 212 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
241#define CSA_CPRT CSA_COPYRIGHT 213 * │     │   │   │   │ ® │   │ ¥ │ ↑ │ ı │   │   │ ° │ ¯ │     │
242#define CSA_LEFT_QUOTE GR2A(LSFT(KC_V)) // ‘ 214 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
243#define CSA_LQOT CSA_LEFT_QUOTE 215 * │      │   │ § │   │ ª │   │   │   │   │   │ ˝ │ ˇ │ ˘ │    │
244#define CSA_RIGHT_QUOTE GR2A(LSFT(KC_B)) // ’ 216 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
245#define CSA_RQOT CSA_RIGHT_QUOTE 217 * │    │ ¦ │   │   │ © │ ‘ │ ’ │ ♪ │ º │ × │ ÷ │   │          │
246#define CSA_EIGHTH_NOTE GR2A(LSFT(KC_N)) // ♪ 218 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
247#define CSA_8NOT CSA_EIGHTH_NOTE 219 * │    │    │    │                        │    │    │    │    │
248#define CSA_ORDINAL_INDICATOR_O GR2A(LSFT(KC_M)) // º 220 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
249#define CSA_ORDO CSA_ORDINAL_INDICATOR_O 221 */
250#define CSA_TIMES GR2A(LSFT(KC_COMMA)) // × 222// Row 1
251#define CSA_TIMS CSA_TIMES 223#define CA_SHYP RCTL(S(CA_SLSH)) // (soft hyphen)
252#define CSA_OBELUS GR2A(LSFT(KC_DOT)) // ÷ 224#define CA_IEXL RCTL(S(CA_1)) // ¡
253#define CSA_OBEL CSA_OBELUS 225#define CA_PND RCTL(S(CA_3)) // £
254// more conventional name of the symbol 226#define CA_TEIG RCTL(S(CA_5)) // ⅜
255#define CSA_DIVISION_SIGN CSA_OBELUS 227#define CA_FEIG RCTL(S(CA_6)) // ⅝
256#define CSA_DVSN CSA_DIVISION_SIGN 228#define CA_SEIG RCTL(S(CA_7)) // ⅞
257// TODO GR2A(LSFT(CSA_E_ACUTE)) 229#define CA_TM RCTL(S(CA_8)) // ™
230#define CA_PLMN RCTL(S(CA_9)) // ±
231#define CA_IQUE RCTL(S(CA_MINS)) // ¿
232#define CA_OGON RCTL(S(CA_EQL)) // ˛ (dead)
233// Row 2
234#define CA_REGD RCTL(S(CA_R)) // ®
235#define CA_YEN RCTL(S(CA_Y)) // ¥
236#define CA_UARR RCTL(S(CA_U)) // ↑
237#define CA_DLSI RCTL(S(CA_I)) // ı
238#define CA_RNGA RCTL(S(CA_CIRC)) // ° (dead)
239#define CA_MACR RCTL(S(CA_CCED)) // ¯ (dead)
240// Row 3
241#define CA_SECT RCTL(S(CA_S)) // §
242#define CA_FORD RCTL(S(CA_F)) // ª
243#define CA_DACU RCTL(S(CA_SCLN)) // ˝ (dead)
244#define CA_CARN RCTL(S(CA_EGRV)) // ˇ (dead)
245#define CA_BREV RCTL(S(CA_AGRV)) // ˘ (dead)
246// Row 4
247#define CA_BRKP RCTL(S(CA_UGRV)) // ¦
248#define CA_COPY RCTL(S(CA_C)) // ©
249#define CA_LSQU RCTL(S(CA_V)) // ‘
250#define CA_RSQU RCTL(S(CA_B)) // ’
251#define CA_ENOT RCTL(S(CA_N)) // ♪
252#define CA_MORD RCTL(S(CA_M)) // º
253#define CA_MUL RCTL(S(CA_COMM)) // ×
254#define CA_DIV RCTL(S(CA_DOT)) // ÷
258 255
259#endif 256// DEPRECATED
257#define GR2A(kc) RCTL(kc)
258#define CSA_SLASH CA_SLSH
259#define CSA_SLSH CA_SLSH
260#define CSA_DEAD_CIRCUMFLEX CA_CIRC
261#define CSA_DCRC CA_CIRC
262#define CSA_C_CEDILLA CA_CCED
263#define CSA_CCED CA_CCED
264#define CSA_E_GRAVE CA_EGRV
265#define CSA_EGRV CA_EGRV
266#define CSA_A_GRAVE CA_AGRV
267#define CSA_AGRV CA_AGRV
268#define CSA_U_GRAVE CA_UGRV
269#define CSA_UGRV CA_UGRV
270#define CSA_E_ACUTE CA_EACU
271#define CSA_ECUT CA_EACU
272#define CSA_BACKSLASH CA_BSLS
273#define CSA_BSLS CA_BSLS
274#define CSA_QUESTION CA_QUES
275#define CSA_QEST CA_QUES
276#define CSA_DEAD_TREMA CA_DIAE
277#define CSA_DTRM CA_DIAE
278#define CSA_APOSTROPHE CA_QUOT
279#define CSA_APOS CA_QUOT
280#define CSA_DOUBLE_QUOTE CA_DQUO
281#define CSA_DQOT CA_DQUO
282#define CSA_PIPE CA_PIPE
283#define CSA_CURRENCY CA_CURR
284#define CSA_CURR CA_CURR
285#define CSA_LEFT_CURLY_BRACE CA_LCBR
286#define CSA_LCBR CA_LCBR
287#define CSA_RIGHT_CURLY_BRACE CA_RCBR
288#define CSA_RCBR CA_RCBR
289#define CSA_LBRACKET CA_LBRC
290#define CSA_LBRC CA_LBRC
291#define CSA_RBRACKET CA_RBRC
292#define CSA_RBRC CA_RBRC
293#define CSA_NEGATION CA_NOT
294#define CSA_NEGT CA_NOT
295#define CSA_EURO CA_EURO
296#define CSA_DEAD_GRAVE CA_GRV
297#define CSA_DGRV CA_GRV
298#define CSA_DEAD_TILDE CA_DTIL
299#define CSA_DTLD CA_DTIL
300#define CSA_DEGREE CA_DEG
301#define CSA_DEGR CA_DEG
302#define CSA_LEFT_GUILLEMET CA_LDAQ
303#define CSA_LGIL CA_LDAQ
304#define CSA_RIGHT_GUILLEMET CA_RDAQ
305#define CSA_RGIL CA_RDAQ
306#define CSA_LESS CA_LABK
307#define CSA_GREATER CA_RABK
308#define CSA_GRTR CA_RABK
309#define CSA_NON_BREAKING_SPACE ALGR(KC_SPC)
310#define CSA_NBSP ALGR(KC_SPC)
311#define CSA_SUPERSCRIPT_ONE CA_SUP1
312#define CSA_SUP1 CA_SUP1
313#define CSA_SUPERSCRIPT_TWO CA_SUP2
314#define CSA_SUP2 CA_SUP2
315#define CSA_SUPERSCRIPT_THREE CA_SUP3
316#define CSA_SUP3 CA_SUP3
317#define CSA_ONE_QUARTER CA_QRTR
318#define CSA_1QRT CA_QRTR
319#define CSA_ONE_HALF CA_HALF
320#define CSA_1HLF CA_HALF
321#define CSA_THREE_QUARTERS CA_TQTR
322#define CSA_3QRT CA_TQTR
323#define CSA_DEAD_CEDILLA CA_CEDL
324#define CSA_DCED CA_CEDL
325#define CSA_OMEGA CA_OMEG
326#define CSA_OMEG CA_OMEG
327#define CSA_L_STROKE CA_LSTR
328#define CSA_LSTK CA_LSTR
329#define CSA_OE_LIGATURE CA_OE
330#define CSA_OE CA_OE
331#define CSA_PARAGRAPH CA_PARA
332#define CSA_PARG CA_PARA
333#define CSA_T_STROKE CA_TSTR
334#define CSA_LEFT_ARROW CA_LARR
335#define CSA_LARW CA_LARR
336#define CSA_DOWN_ARROW CA_DARR
337#define CSA_DARW CA_DARR
338#define CSA_RIGHT_ARROW CA_RARR
339#define CSA_RARW CA_RARR
340#define CSA_O_STROKE CA_OSTR
341#define CSA_OSTK CA_OSTR
342#define CSA_THORN CA_THRN
343#define CSA_THRN CA_THRN
344#define CSA_TILDE CA_TILD
345#define CSA_TILD CA_TILD
346#define CSA_AE_LIGATURE CA_AE
347#define CSA_AE CA_AE
348#define CSA_SHARP_S CA_SS
349#define CSA_SRPS CA_SS
350#define CSA_ETH CA_ETH
351#define CSA_ENG CA_ENG
352#define CSA_H_SRTOKE CA_HSTR
353#define CSA_HSTK CA_HSTR
354#define CSA_IJ_LIGATURE CA_IJ
355#define CSA_IJ CA_IJ
356#define CSA_KRA CA_KRA
357#define CSA_L_FLOWN_DOT CA_LMDT
358#define CSA_LFLD CA_LMDT
359#define CSA_DEAD_ACUTE CA_ACUT
360#define CSA_DACT CA_ACUT
361#define CSA_CENT CA_CENT
362#define CSA_LEFT_DOUBLE_QUOTE CA_LDQU
363#define CSA_LDQT CA_LDQU
364#define CSA_RIGHT_DOUBLE_QUOTE CA_RDQU
365#define CSA_RDQT CA_RDQU
366#define CSA_N_APOSTROPHE CA_APSN
367#define CSA_NAPO CA_APSN
368#define CSA_MU CA_MICR
369#define CSA_HORIZONTAL_BAR CA_HRZB
370#define CSA_HZBR CA_HRZB
371#define CSA_DEAD_DOT_ABOVE CA_DOTA
372#define CSA_DDTA CA_DOTA
373#define CSA_SOFT_HYPHEN CA_SHYP
374#define CSA_SHYP CA_SHYP
375#define CSA_INVERTED_EXCLAIM CA_IEXL
376#define CSA_IXLM CA_IEXL
377#define CSA_POUND CA_PND
378#define CSA_GBP CA_PND
379#define CSA_EURO_BIS CA_EURO
380#define CSA_EURB CA_EURO
381#define CSA_THREE_EIGHTHS CA_TEIG
382#define CSA_3ON8 CA_TEIG
383#define CSA_FIVE_EIGHTHS CA_FEIG
384#define CSA_5ON8 CA_FEIG
385#define CSA_SEVEN_EIGHTHS CA_SEIG
386#define CSA_7ON8 CA_SEIG
387#define CSA_TRADEMARK CA_TM
388#define CSA_TM CA_TM
389#define CSA_PLUS_MINUS CA_PLMN
390#define CSA_PSMS CA_PLMN
391#define CSA_INVERTED_QUESTION CA_IQUE
392#define CSA_IQST CA_IQUE
393#define CSA_DEAD_OGONEK CA_OGON
394#define CSA_DOGO CA_OGON
395#define CSA_REGISTERED_TRADEMARK CA_REGD
396#define CSA_RTM CA_REGD
397#define CSA_YEN CA_YEN
398#define CSA_YUAN CA_YEN
399#define CSA_UP_ARROW CA_UARR
400#define CSA_DOTLESS_I CA_DLSI
401#define CSA_DLSI CA_DLSI
402#define CSA_DEAD_RING CA_RNGA
403#define CSA_DRNG CA_RNGA
404#define CSA_DEAD_MACRON CA_MACR
405#define CSA_DMCR CA_MACR
406#define CSA_SECTION CA_SECT
407#define CSA_SECT CA_SECT
408#define CSA_ORDINAL_INDICATOR_A CA_FORD
409#define CSA_ORDA CA_FORD
410#define CSA_DEAD_DOUBLE_ACUTE CA_DACU
411#define CSA_DDCT CA_DACU
412#define CSA_DEAD_CARON CA_CARN
413#define CSA_DCAR CA_CARN
414#define CSA_DEAD_BREVE CA_BREV
415#define CSA_DBRV CA_BREV
416#define CSA_BROKEN_PIPE CA_BRKP
417#define CSA_BPIP CA_BRKP
418#define CSA_COPYRIGHT CA_COPY
419#define CSA_CPRT CA_COPY
420#define CSA_LEFT_QUOTE CA_LSQU
421#define CSA_LQOT CA_LSQU
422#define CSA_RIGHT_QUOTE CA_RSQU
423#define CSA_RQOT CA_RSQU
424#define CSA_EIGHTH_NOTE CA_ENOT
425#define CSA_8NOT CA_ENOT
426#define CSA_ORDINAL_INDICATOR_O CA_MORD
427#define CSA_ORDO CA_MORD
428#define CSA_TIMES CA_MUL
429#define CSA_TIMS CA_MUL
430#define CSA_OBELUS CA_DIV
431#define CSA_OBEL CA_DIV
432#define CSA_DIVISION_SIGN CA_DIV
433#define CSA_DVSN CA_DIV
diff --git a/quantum/keymap_extras/sendstring_canadian_multilingual.h b/quantum/keymap_extras/sendstring_canadian_multilingual.h
new file mode 100644
index 000000000..c3fcc62c3
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_canadian_multilingual.h
@@ -0,0 +1,100 @@
1/* Copyright 2020
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17// Sendstring lookup tables for Canadian Multilingual layouts
18
19#pragma once
20
21#include "keymap_canadian_multilingual.h"
22#include "quantum.h"
23
24// clang-format off
25
26const uint8_t ascii_to_shift_lut[16] PROGMEM = {
27 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
28 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
29 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
30 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
31
32 KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
33 KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 0),
34 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
35 KCLUT_ENTRY(0, 0, 1, 0, 0, 0, 0, 1),
36 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
37 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
38 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
39 KCLUT_ENTRY(1, 1, 1, 0, 1, 0, 0, 1),
40 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
41 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
42 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
43 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0)
44};
45
46const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
47 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
48 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
49 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
50 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
51
52 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
53 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
54 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
55 KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 1, 0),
56 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
57 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
58 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
59 KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 0, 0),
60 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
61 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
62 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
63 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
64};
65
66const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
67 // NUL SOH STX ETX EOT ENQ ACK BEL
68 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
69 // BS TAB LF VT FF CR SO SI
70 KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
71 // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
72 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
73 // CAN EM SUB ESC FS GS RS US
74 XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
75
76 // ! " # $ % & '
77 KC_SPC, CA_1, CA_DOT, CA_3, CA_4, CA_5, CA_7, CA_COMM,
78 // ( ) * + , - . /
79 CA_9, CA_0, CA_8, CA_EQL, CA_COMM, CA_MINS, CA_DOT, CA_SLSH,
80 // 0 1 2 3 4 5 6 7
81 CA_0, CA_1, CA_2, CA_3, CA_4, CA_5, CA_6, CA_7,
82 // 8 9 : ; < = > ?
83 CA_8, CA_9, CA_SCLN, CA_SCLN, CA_DOT, CA_EQL, CA_COMM, CA_6,
84 // @ A B C D E F G
85 CA_2, CA_A, CA_B, CA_C, CA_D, CA_E, CA_F, CA_G,
86 // H I J K L M N O
87 CA_H, CA_I, CA_J, CA_K, CA_L, CA_M, CA_N, CA_O,
88 // P Q R S T U V W
89 CA_P, CA_Q, CA_R, CA_S, CA_T, CA_U, CA_V, CA_W,
90 // X Y Z [ \ ] ^ _
91 CA_X, CA_Y, CA_Z, CA_9, CA_SLSH, CA_0, CA_CIRC, CA_MINS,
92 // ` a b c d e f g
93 CA_CIRC, CA_A, CA_B, CA_C, CA_D, CA_E, CA_F, CA_G,
94 // h i j k l m n o
95 CA_H, CA_I, CA_J, CA_K, CA_L, CA_M, CA_N, CA_O,
96 // p q r s t u v w
97 CA_P, CA_Q, CA_R, CA_S, CA_T, CA_U, CA_V, CA_W,
98 // x y z { | } ~ DEL
99 CA_X, CA_Y, CA_Z, CA_7, CA_SLSH, CA_8, CA_CCED, KC_DEL
100};