+/* Copyright 2016 Didier Loiseau
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
#ifndef KEYMAP_CANADIAN_MULTILINGUAG_H
#define KEYMAP_CANADIAN_MULTILINGUAG_H
-#include "keymap_common.h"
+#include "keymap.h"
// Alt gr
#ifndef ALTGR
#define ALGR(kc) ALTGR(kc)
#endif
-#define CM_ALTGR KC_RALT
-#define CM_ALGR CM_ALTGR
+#define CSA_ALTGR KC_RALT
+#define CSA_ALGR CSA_ALTGR
#ifndef GR2A
#define GR2A(kc) RCTL(kc)
// Normal characters
// First row
-#define CM_SLASH KC_GRV // /
-#define CM_SLSH CM_SLASH
+#define CSA_SLASH KC_GRV // /
+#define CSA_SLSH CSA_SLASH
// Second row
-#define CM_DEAD_CIRCUMFLEX KC_LBRACKET // dead ^
-#define CM_DCRC CM_DEAD_CIRCUMFLEX
-#define CM_C_CEDILLA KC_RBRACKET // Ç
-#define CM_CCED CM_C_CEDILLA
+#define CSA_DEAD_CIRCUMFLEX KC_LBRACKET // dead ^
+#define CSA_DCRC CSA_DEAD_CIRCUMFLEX
+#define CSA_C_CEDILLA KC_RBRACKET // Ç
+#define CSA_CCED CSA_C_CEDILLA
// Third row
-#define CM_E_GRAVE KC_QUOT // è
-#define CM_EGRV CM_E_GRAVE
-#define CM_A_GRAVE KC_BSLASH // à
-#define CM_AGRV CM_A_GRAVE
+#define CSA_E_GRAVE KC_QUOT // è
+#define CSA_EGRV CSA_E_GRAVE
+#define CSA_A_GRAVE KC_BSLASH // à
+#define CSA_AGRV CSA_A_GRAVE
// Fourth row
-#define CM_U_GRAVE KC_NONUS_BSLASH // ù
-#define CM_UGRV CM_U_GRAVE
-#define CM_E_ACUTE KC_SLSH // é
-#define CM_ECUT CM_E_ACUTE
+#define CSA_U_GRAVE KC_NONUS_BSLASH // ù
+#define CSA_UGRV CSA_U_GRAVE
+#define CSA_E_ACUTE KC_SLSH // é
+#define CSA_ECUT CSA_E_ACUTE
// Shifted characters
// First row
-#define CM_BACKSLASH LSFT(CM_SLASH) /* \ */
-#define CM_BSLS CM_BACKSLASH
-#define CM_QUESTION LSFT(KC_6) // ?
-#define CM_QEST CM_QUESTION
+#define CSA_BACKSLASH LSFT(CSA_SLASH) /* \ */
+#define CSA_BSLS CSA_BACKSLASH
+#define CSA_QUESTION LSFT(KC_6) // ?
+#define CSA_QEST CSA_QUESTION
// Second row
-#define CM_DEAD_TREMA LSFT(CM_DEAD_CIRCUMFLEX) // dead trema/umlaut/diaresis for ä ë ï ö ü
-#define CM_DTRM CM_DEAD_TREMA
+#define CSA_DEAD_TREMA LSFT(CSA_DEAD_CIRCUMFLEX) // dead trema/umlaut/diaresis for ä ë ï ö ü
+#define CSA_DTRM CSA_DEAD_TREMA
// Third row
// all same as US-QWERTY, or capitalised character of the non-shifted key
// Fourth row
-#define CM_APOSTROPHE LSFT(KC_COMMA) // '
-#define CM_APOS CM_APOSTROPHE
-#define CM_DOUBLE_QUOTE LSFT(KC_DOT) // "
-#define CM_DQOT CM_DOUBLE_QUOTE
+#define CSA_APOSTROPHE LSFT(KC_COMMA) // '
+#define CSA_APOS CSA_APOSTROPHE
+#define CSA_DOUBLE_QUOTE LSFT(KC_DOT) // "
+#define CSA_DQOT CSA_DOUBLE_QUOTE
// Alt Gr-ed characters
// First row
-#define CM_PIPE ALTGR(CM_SLASH) // |
-#define CM_CURRENCY ALTGR(KC_4) // ¤
-#define CM_CURR CM_CURRENCY
-#define CM_LEFT_CURLY_BRACE ALTGR(KC_7) // {
-#define CM_LCBR CM_LEFT_CURLY_BRACE
-#define CM_RIGHT_CURLY_BRACE ALTGR(KC_8) // }
-#define CM_RCBR CM_RIGHT_CURLY_BRACE
-#define CM_LBRACKET ALTGR(KC_9) // [
-#define CM_LBRC CM_LBRACKET
-#define CM_RBRACKET ALTGR(KC_0) // ]
-#define CM_RBRC CM_RBRACKET
-#define CM_NEGATION ALTGR(KC_EQUAL) // ¬
-#define CM_NEGT CM_NEGATION
+#define CSA_PIPE ALTGR(CSA_SLASH) // |
+#define CSA_CURRENCY ALTGR(KC_4) // ¤
+#define CSA_CURR CSA_CURRENCY
+#define CSA_LEFT_CURLY_BRACE ALTGR(KC_7) // {
+#define CSA_LCBR CSA_LEFT_CURLY_BRACE
+#define CSA_RIGHT_CURLY_BRACE ALTGR(KC_8) // }
+#define CSA_RCBR CSA_RIGHT_CURLY_BRACE
+#define CSA_LBRACKET ALTGR(KC_9) // [
+#define CSA_LBRC CSA_LBRACKET
+#define CSA_RBRACKET ALTGR(KC_0) // ]
+#define CSA_RBRC CSA_RBRACKET
+#define CSA_NEGATION ALTGR(KC_EQUAL) // ¬
+#define CSA_NEGT CSA_NEGATION
// Second row
// euro symbol not available on Linux? (X.org)
-#define CM_EURO ALTGR(KC_E) // €
-#define CM_DEAD_GRAVE ALTGR(CM_DEAD_CIRCUMFLEX)
-#define CM_DGRV CM_DEAD_GRAVE // dead `
-#define CM_TILDE ALTGR(CM_C_CEDILLA) // ~
-#define CM_TILD CM_TILDE
+#define CSA_EURO ALTGR(KC_E) // €
+#define CSA_DEAD_GRAVE ALTGR(CSA_DEAD_CIRCUMFLEX)
+#define CSA_DGRV CSA_DEAD_GRAVE // dead `
+#define CSA_DEAD_TILDE ALTGR(CSA_C_CEDILLA) // ~
+#define CSA_DTLD CSA_DEAD_TILDE
// Third row
-#define CM_DEGREE ALTGR(KC_SCOLON) // °
-#define CM_DEGR CM_DEGREE
+#define CSA_DEGREE ALTGR(KC_SCOLON) // °
+#define CSA_DEGR CSA_DEGREE
// Fourth row
-#define CM_LEFT_GUILLEMET ALTGR(KC_Z) // «
-#define CM_LGIL CM_LEFT_GUILLEMET
-#define CM_RIGHT_GUILLEMET ALTGR(KC_X) // »
-#define CM_RGIL CM_RIGHT_GUILLEMET
-#define CM_LESS ALTGR(KC_COMMA) // <
-#define CM_GREATER ALTGR(KC_DOT) // >
-#define CM_GRTR CM_GREATER
+#define CSA_LEFT_GUILLEMET ALTGR(KC_Z) // «
+#define CSA_LGIL CSA_LEFT_GUILLEMET
+#define CSA_RIGHT_GUILLEMET ALTGR(KC_X) // »
+#define CSA_RGIL CSA_RIGHT_GUILLEMET
+#define CSA_LESS ALTGR(KC_COMMA) // <
+#define CSA_GREATER ALTGR(KC_DOT) // >
+#define CSA_GRTR CSA_GREATER
// Space bar
-#define CM_NON_BREAKING_SPACE ALTGR(KC_SPACE)
-#define CM_NBSP CM_NON_BREAKING_SPACE
+#define CSA_NON_BREAKING_SPACE ALTGR(KC_SPACE)
+#define CSA_NBSP CSA_NON_BREAKING_SPACE
-// GR2A-ed characters (non-exhaustive list)
+// GR2A-ed characters
// First row
-#define CM_SUPERSCRIPT_ONE GR2A(KC_1) // ¹
-#define CM_SUP1 CM_SUPERSCRIPT_ONE
-#define CM_SUPERSCRIPT_TWO GR2A(KC_2) // ²
-#define CM_SUP2 CM_SUPERSCRIPT_TWO
-#define CM_SUPERSCRIPT_THREE GR2A(KC_3) // ³
-#define CM_SUP3 CM_SUPERSCRIPT_THREE
-#define CM_ONE_QUARTER GR2A(KC_4) // ¼
-#define CM_1QRT CM_ONE_QUARTER
-#define CM_ONE_HALF GR2A(KC_5) // ½
-#define CM_1HLF CM_ONE_HALF
-#define CM_THREE_QUARTERS GR2A(KC_6) // ¾
-#define CM_3QRT CM_THREE_QUARTERS
+#define CSA_SUPERSCRIPT_ONE GR2A(KC_1) // ¹
+#define CSA_SUP1 CSA_SUPERSCRIPT_ONE
+#define CSA_SUPERSCRIPT_TWO GR2A(KC_2) // ²
+#define CSA_SUP2 CSA_SUPERSCRIPT_TWO
+#define CSA_SUPERSCRIPT_THREE GR2A(KC_3) // ³
+#define CSA_SUP3 CSA_SUPERSCRIPT_THREE
+#define CSA_ONE_QUARTER GR2A(KC_4) // ¼
+#define CSA_1QRT CSA_ONE_QUARTER
+#define CSA_ONE_HALF GR2A(KC_5) // ½
+#define CSA_1HLF CSA_ONE_HALF
+#define CSA_THREE_QUARTERS GR2A(KC_6) // ¾
+#define CSA_3QRT CSA_THREE_QUARTERS
// nothing on 7-0 and -
-#define CM_DEAD_CEDILLA GR2A(KC_EQUAL) // dead ¸
-#define CM_DCED CM_DEAD_CEDILLA
+#define CSA_DEAD_CEDILLA GR2A(KC_EQUAL) // dead ¸
+#define CSA_DCED CSA_DEAD_CEDILLA
// Second row
-#define CM_OMEGA GR2A(KC_Q) // ω
-#define CM_OMEG CM_OMEGA
-#define CM_L_STROKE GR2A(KC_W) // ł
-#define CM_LSTK CM_L_STROKE
-#define CM_OE_LIGATURE GR2A(KC_E) // œ
-#define CM_OE CM_OE_LIGATURE
-#define CM_PARAGRAPH GR2A(KC_R) // ¶
-#define CM_PARG CM_PARAGRAPH
-#define CM_T_STROKE GR2A(KC_T) // ŧ
-#define CM_LEFT_ARROW GR2A(KC_Y) // ←
-#define CM_LARW CM_LEFT_ARROW
-#define CM_DOWN_ARROW GR2A(KC_U) // ↓
-#define CM_DARW CM_DOWN_ARROW
-#define CM_RIGHT_ARROW GR2A(KC_I) // →
-#define CM_RARW CM_RIGHT_ARROW
-#define CM_O_STROKE GR2A(KC_O) // ø
-#define CM_OSTK CM_O_STROKE
-#define CM_THORN GR2A(KC_P) // þ
-#define CM_THRN CM_THORN
+#define CSA_OMEGA GR2A(KC_Q) // ω
+#define CSA_OMEG CSA_OMEGA
+#define CSA_L_STROKE GR2A(KC_W) // ł
+#define CSA_LSTK CSA_L_STROKE
+#define CSA_OE_LIGATURE GR2A(KC_E) // œ
+#define CSA_OE CSA_OE_LIGATURE
+#define CSA_PARAGRAPH GR2A(KC_R) // ¶
+#define CSA_PARG CSA_PARAGRAPH
+#define CSA_T_STROKE GR2A(KC_T) // ŧ
+#define CSA_LEFT_ARROW GR2A(KC_Y) // ←
+#define CSA_LARW CSA_LEFT_ARROW
+#define CSA_DOWN_ARROW GR2A(KC_U) // ↓
+#define CSA_DARW CSA_DOWN_ARROW
+#define CSA_RIGHT_ARROW GR2A(KC_I) // →
+#define CSA_RARW CSA_RIGHT_ARROW
+#define CSA_O_STROKE GR2A(KC_O) // ø
+#define CSA_OSTK CSA_O_STROKE
+#define CSA_THORN GR2A(KC_P) // þ
+#define CSA_THRN CSA_THORN
// nothing on ^
-#define CM_DEAD_TILDE GR2A(CM_C_CEDILLA) // dead ~
-#define CM_DTLD CM_DEAD_TILDE
+#define CSA_TILDE GR2A(CSA_C_CEDILLA) // dead ~
+#define CSA_TILD CSA_TILDE
// Third row
-#define CM_AE_LIGATURE GR2A(KC_A) // æ
-#define CM_AE CM_AE_LIGATURE
-#define CM_SHARP_S GR2A(KC_S) // ß
-#define CM_SRPS CM_SHARP_S
-#define CM_ETH GR2A(KC_D) // ð
+#define CSA_AE_LIGATURE GR2A(KC_A) // æ
+#define CSA_AE CSA_AE_LIGATURE
+#define CSA_SHARP_S GR2A(KC_S) // ß
+#define CSA_SRPS CSA_SHARP_S
+#define CSA_ETH GR2A(KC_D) // ð
// nothing on F
-#define CM_ENG GR2A(KC_G) // ŋ
-#define CM_H_SRTOKE GR2A(KC_H) // ħ
-#define CM_HSTK CM_H_SRTOKE
-#define CM_IJ_LIGATURE GR2A(KC_J) // ij
-#define CM_IJ CM_IJ_LIGATURE
-#define CM_KRA GR2A(KC_K) // ĸ
-#define CM_L_FLOWN_DOT GR2A(KC_L) // ŀ
-#define CM_LFLD CM_L_FLOWN_DOT
-#define CM_DEAD_ACUTE GR2A(KC_SCLN) // dead acute accent
-#define CM_DACT CM_DEAD_ACUTE
+#define CSA_ENG GR2A(KC_G) // ŋ
+#define CSA_H_SRTOKE GR2A(KC_H) // ħ
+#define CSA_HSTK CSA_H_SRTOKE
+#define CSA_IJ_LIGATURE GR2A(KC_J) // ij
+#define CSA_IJ CSA_IJ_LIGATURE
+#define CSA_KRA GR2A(KC_K) // ĸ
+#define CSA_L_FLOWN_DOT GR2A(KC_L) // ŀ
+#define CSA_LFLD CSA_L_FLOWN_DOT
+#define CSA_DEAD_ACUTE GR2A(KC_SCLN) // dead acute accent
+#define CSA_DACT CSA_DEAD_ACUTE
// nothing on È & À
// Fourth row
-#define CM_CENT GR2A(KC_C) // ¢
-#define CM_LEFT_DOUBLE_QUOTE GR2A(KC_V) // “
-#define CM_LDQT CM_LEFT_DOUBLE_QUOTE
-#define CM_RIGHT_DOUBLE_QUOTE GR2A(KC_B) // ”
-#define CM_RDQT CM_RIGHT_DOUBLE_QUOTE
-#define CM_N_APOSTROPHE GR2A(KC_N) // ʼn (deprecated unicode codepoint)
-#define CM_NAPO CM_N_APOSTROPHE
-#define CM_MU GR2A(KC_M) // μ
-// ─ TODO box drawing character?
-#define CM_HYPHENATION_POINT GR2A(CM_DOT) // ‧ TODO not an interpunct ?
-
-// GR2A-shifted characters (non-exhaustive list)
+#define CSA_CENT GR2A(KC_C) // ¢
+#define CSA_LEFT_DOUBLE_QUOTE GR2A(KC_V) // “
+#define CSA_LDQT CSA_LEFT_DOUBLE_QUOTE
+#define CSA_RIGHT_DOUBLE_QUOTE GR2A(KC_B) // ”
+#define CSA_RDQT CSA_RIGHT_DOUBLE_QUOTE
+#define CSA_N_APOSTROPHE GR2A(KC_N) // ʼn (deprecated unicode codepoint)
+#define CSA_NAPO CSA_N_APOSTROPHE
+#define CSA_MU GR2A(KC_M) // μ
+#define CSA_HORIZONTAL_BAR GR2A(KC_COMMA) // ―
+#define CSA_HZBR CSA_HORIZONTAL_BAR
+#define CSA_DEAD_DOT_ABOVE GR2A(KC_DOT) // dead ˙
+#define CSA_DDTA CSA_DEAD_DOT_ABOVE
+
+// GR2A-shifted characters (different from capitalised GR2A-ed characters)
// First row
-#define CM_PLUS_MINUS LSFT(GR2A(KC_9)) // ±
-#define CM_PSMS CM_PLUS_MINUS
+#define CSA_SOFT_HYPHEN GR2A(LSFT(CSA_SLASH)) // soft-hyphen, appears as a hyphen in wrapped word
+#define CSA_SHYP CSA_SOFT_HYPHEN
+#define CSA_INVERTED_EXCLAIM GR2A(KC_EXCLAIM) // ¡
+#define CSA_IXLM CSA_INVERTED_EXCLAIM
+// nothing on 2
+#define CSA_POUND GR2A(LSFT(KC_3)) // £
+#define CSA_GBP CSA_POUND_SIGN
+// already on ALTGR(KC_E)
+#define CSA_EURO_BIS GR2A(LSFT(KC_4)) // €
+#define CSA_EURB CSA_EURO_BIS
+#define CSA_THREE_EIGHTHS GR2A(LSFT(KC_5)) // ⅜
+#define CSA_3ON8 CSA_THREE_EIGHTHS
+#define CSA_FIVE_EIGHTHS GR2A(LSFT(KC_6)) // ⅝
+#define CSA_5ON8 CSA_FIVE_EIGHTHS
+#define CSA_SEVEN_EIGHTHS GR2A(LSFT(KC_7)) // ⅞
+#define CSA_7ON8 CSA_SEVEN_EIGHTHS
+#define CSA_TRADEMARK GR2A(LSFT(KC_8)) // ™
+#define CSA_TM CSA_TRADEMARK
+#define CSA_PLUS_MINUS GR2A(LSFT(KC_9)) // ±
+#define CSA_PSMS CSA_PLUS_MINUS
+// nothing on 0
+#define CSA_INVERTED_QUESTION GR2A(LSFT(KC_MINUS)) // ¿
+#define CSA_IQST CSA_INVERTED_QUESTION
+#define CSA_DEAD_OGONEK GR2A(LSFT(KC_EQUAL)) // dead ˛
+#define CSA_DOGO CSA_DEAD_OGONEK
+
+// Second row
+#define CSA_REGISTERED_TRADEMARK GR2A(LSFT(KC_R)) // ®
+#define CSA_RTM CSA_REGISTERED_TRADEMARK
+#define CSA_YEN GR2A(LSFT(KC_Y)) // ¥
+#define CSA_YUAN CSA_YEN
+#define CSA_UP_ARROW LSFT(CSA_DOWN_ARROW) // ↑
+#define CSA_DOTLESS_I GR2A(LSFT(KC_I)) // ı
+#define CSA_DLSI CSA_DOTLESS_I
+#define CSA_DEAD_RING GR2A(LSFT(CSA_DCRC)) // dead °
+#define CSA_DRNG CSA_DEAD_RING
+#define CSA_DEAD_MACRON GR2A(LSFT(CSA_C_CEDILLA)) // dead ¯
+#define CSA_DMCR CSA_DEAD_MACRON
+
+// Third row
+#define CSA_SECTION GR2A(LSFT(KC_S)) // §
+#define CSA_SECT CSA_SECTION
+#define CSA_ORDINAL_INDICATOR_A GR2A(LSFT(KC_F)) // ª
+#define CSA_ORDA CSA_ORDINAL_INDICATOR_A
+#define CSA_DEAD_DOUBLE_ACUTE LSFT(CSA_DEAD_ACUTE) // ˝
+#define CSA_DDCT CSA_DEAD_DOUBLE_ACUTE
+#define CSA_DEAD_CARON GR2A(LSFT(CSA_E_GRAVE)) // dead ˇ
+#define CSA_DCAR CSA_DEAD_CARON
+#define CSA_DEAD_BREVE GR2A(LSFT(CSA_A_GRAVE)) // dead ˘
+#define CSA_DBRV CSA_DEAD_BREVE
// Fourth row
-#define CM_LEFT_QUOTE LSFT(GR2A(KC_V)) // ‘
-#define CM_LQOT CM_LEFT_QUOTE
-#define CM_RIGHT_QUOTE LSFT(GR2A(KC_B)) // ’
-#define CM_RQOT CM_RIGHT_QUOTE
+#define CSA_BROKEN_PIPE GR2A(LSFT(CSA_U_GRAVE)) // ¦
+#define CSA_BPIP CSA_BROKEN_PIPE
+#define CSA_COPYRIGHT GR2A(LSFT(KC_C)) // ©
+#define CSA_CPRT CSA_COPYRIGHT
+#define CSA_LEFT_QUOTE GR2A(LSFT(KC_V)) // ‘
+#define CSA_LQOT CSA_LEFT_QUOTE
+#define CSA_RIGHT_QUOTE GR2A(LSFT(KC_B)) // ’
+#define CSA_RQOT CSA_RIGHT_QUOTE
+#define CSA_EIGHTH_NOTE GR2A(LSFT(KC_N)) // ♪
+#define CSA_8NOT CSA_EIGHTH_NOTE
+#define CSA_ORDINAL_INDICATOR_O GR2A(LSFT(KC_M)) // º
+#define CSA_ORDO CSA_ORDINAL_INDICATOR_O
+#define CSA_TIMES GR2A(LSFT(KC_COMMA)) // ×
+#define CSA_TIMS CSA_TIMES
+#define CSA_OBELUS GR2A(LSFT(KC_DOT)) // ÷
+#define CSA_OBEL CSA_OBELUS
+// more conventional name of the symbol
+#define CSA_DIVISION_SIGN CSA_OBELUS
+#define CSA_DVSN CSA_DIVISION_SIGN
+// TODO GR2A(LSFT(CSA_E_ACUTE))
#endif