/*
 * License (GPL):
  
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/>.

 * Author: © 2019, 2020 by Jos Boersema
 *
 */

#pragma once

/*        An amount of Unicode #defines
 *        - western european accented characters
 *        - various punctuation symbols, different number formats, math symbols, other symbols. 
 */

    // a lower case variants
#define CAL_ACU  0xe1 //   'C' for Costum 'A' for a, 'L' for lower, "ACU" for acute: á
#define CAL_CAR  0xe2 //        ''              ''        ''        "CAR" for caret: â
#define CAL_DIA  0xe4 //        ''              ''        ''        "DIA" for diaereses: ä
#define CAL_GRA  0xe0 //        ''              ''        ''        "GRA" for grave: à
      // A upper case variants
#define CAU_ACU  0xc1 //        ''              ''   'U' for upper, "ACU" for acute: Á
#define CAU_CAR  0xc2 //        ''              ''        ''        "CAR" for caret: Â
#define CAU_DIA  0xc4 //        ''              ''        ''        "DIA" for diaereses: Ä
#define CAU_GRA  0xc0 //        ''              ''        ''        "GRA" for grave: À

    // A with ring (Scandinavia)
#define CAL_RNG  0xe5 //        ''        'A' for a, 'L' for lower, "RNG" for Ring: å
#define CAU_RNG  0xc5 //        ''             ''    'U' for upper,        ''     : Å

    // AE (French)          
#define CAEL_BI  0xe6 //        ''        "AE" for ae, 'L' for lower        ''              : æ
#define CAEU_BI  0xc6 //        ''              ''     'U' for upper,       ''              : Æ

    // OE (French)
#define COEL_BI  0x153 //       ''        "AO" for ao, 'L' for lower, "BI" for two-character: œ
#define COEU_BI  0x152 //       ''              ''     'U' for upper,       ''              ; Œ

   // Mu (French)
#define C_MU_L   0x03BC //      ''        "MU" for Mu (Greek letter), 'L' for lower: 

    // C with cedilla
#define CCL_CDL  0xe7 //        ''        'C' for c, 'L' for lower, "CDL" for cedilla: ç 
#define CCU_CDL  0xc7 //        ''             ''    'U' for upper,        ''        : Ç

    // e lower case variants
#define CEL_ACU  0xe9 //   'C' for Costum 'E' for e, 'L' for lower, "ACU" for acute: é
#define CEL_CAR  0xea //        ''              ''        ''        "CAR" for caret: ê
#define CEL_DIA  0xeb //        ''              ''        ''        "DIA" for diaereses: ë
#define CEL_GRA  0xe8 //        ''              ''        ''        "GRA" for grave: è
      // E upper case variants
#define CEU_ACU  0xc9 //        ''              ''   'U' for uuper, "ACU" for acute: É
#define CEU_CAR  0xca //        ''              ''        ''        "CAR" for caret: Ê
#define CEU_DIA  0xcb //        ''              ''        ''        "DIA" for diaereses: Ë
#define CEU_GRA  0xc8 //        ''              ''        ''        "GRA" for grave: È
    
    // i lower case variants
#define CIL_ACU  0xed //        ''         'I' for i, 'L' for lower, "ACU" for acute: í
#define CIL_CAR  0xee //        ''              ''         ''        "CAR" for caret: î
#define CIL_DIA  0xef //        ''              ''         ''        "DIA" for diaereses: ï
#define CIL_GRA  0xec //        ''              ''         ''        "GRA" for grave: ì
      // I upper case variants
#define CIU_ACU  0xcd //        ''              ''    'U' for upper, "ACU" for acute: Í
#define CIU_CAR  0xce //        ''              ''         ''        "CAR" for caret: Î
#define CIU_DIA  0xcf //        ''              ''         ''        "DIA" for diaereses: Ï
#define CIU_GRA  0xcc //        ''              ''         ''        "GRA" for grave: Ì

    // N with tilde
#define CNL_TLD  0xf1 //        ''        'N' for n, 'L' for lower, "TLD" for tilde: ñ
#define CNU_TLD  0xd1 //        ''             ''    'U' for upper,        ''      : Ñ

    //Spanish additional symbols:
#define CEX_INV  0xa1 //        ''        "EX" for exclamation mark, "INV" for inverted: ¡
#define CQU_INV  0xbf //        ''        "QU" for question mark,           ''         : ¿
    
    // o lower case variants
#define COL_ACU  0xf3 //   'C' for Costum 'O' for a, 'L' for lower, "ACU" for acute: ó
#define COL_CAR  0xf4 //        ''              ''        ''        "CAR" for caret: ô
#define COL_DIA  0xf6 //        ''              ''        ''        "DIA" for diaereses: ö
#define COL_GRA  0xf2 //        ''              ''        ''        "GRA" for grave: ò
      // O upper case variants
#define COU_ACU  0xd3 //        ''              ''   'U' for upper, "ACU" for acute: Ó
#define COU_CAR  0xd4 //        ''              ''        ''        "CAR" for caret: Ô
#define COU_DIA  0xd6 //        ''              ''        ''        "DIA" for diaereses: Ö
#define COU_GRA  0xd2 //        ''              ''        ''        "GRA" for grave: Ò
                            
    // O with stroke (Scandinavia)
#define COL_STK  0xf8 //        ''        'O' for o, 'L' for lower, "STK" for Stroke: ø
#define COU_STK  0xd8 //        ''             ''    'U' for upper,        ''       : Ø

    // u lower case variants
#define CUL_ACU  0xfa //    'C' for Costum 'U' for u, 'L' for lower, "ACU" for acute: ú
#define CUL_CAR  0xfb //        ''              ''        ''        "CAR" for caret: û
#define CUL_DIA  0xfc //        ''              ''        ''        "DIA" for diaereses: ü
#define CUL_GRA  0xf9 //        ''              ''        ''        "GRA" for grave: ù
      // U upper case variants
#define CUU_ACU  0xda //        ''        'U' for u, 'U' for upper, "ACU" for acute: Ú
#define CUU_CAR  0xdb //        ''              ''        ''        "CAR" for caret: Û
#define CUU_DIA  0xdc //        ''              ''        ''        "DIA" for diaereses: Ü
#define CUU_GRA  0xd9 //        ''              ''        ''        "GRA" for grave: Ù

    // Y with acute
#define CYL_ACU  0xfd //        ''        'Y' for y, 'L' for lower, "ACU" for Acute: ý
#define CYU_ACU  0xdd //        ''             ''    'U' for upper,        ''      : Ý
    // Y with diaereses
#define CYL_DIA  0xff //        ''        'Y' for y, 'L' for lower, "DIA" for Diareses: ÿ
#define CYU_DIA  0x178 //       ''             ''    'U' for upper,        ''         : Ÿ

    // Dutch IJ 
#define CIJL_BI  0x133 //       ''        'IJ' for ij, 'L' for lower, BI for two-character: ij
#define CIJU_BI  0x132 //       ''              ''   , 'U' for upper      ''              : IJ

    //German:
     // sharp s 
#define CSL_SHP  0xdf //        ''         'S' for s, 'L' for lower, "SHP" for sharp: ß
  
    // Some Unicode symbols that might be handy
      // Happy symbols:
#define CS_SMIL  0x1f642 // "C" for costum, "S" for symbol , "SMIL"  for <smile> 🙂 
#define CS_SMILP 0x1F60A //     ''        ,     ''         , "SMIL" for smile, "P" for plus: 😊
#define CS_THUP  0x1f44d //     ''        ,     ''         , "THUP"  for <thumb up> 👍 
  
      //Sad symbols
#define CS_SAD_  0x1f641 //     ''        ,     ''         , "SAD_"   for  <sad face>  🙁 
#define CS_SQUIG 0x2368 //      ''        ,     ''         , "SQUIG" for squigly face: ⍨
#define CS_THDN  0x1f44e //     ''        ,     ''         , "THDN"  for <thumb down>  👎 

// Punctuation
#define CS_ASTL    0x20F0 //    ''     ,    ''       , "AST" for asterisk, "L" for little:  ⃰
#define CS_DASH    0x2014 //    ''     ,    ''       , "DASH" for dash (a longer hyphen, if rendered correctly): —
#define CS_DQUH    0x201D //    ''     ,    ''       , "D" for double, "QU" for quote, "H" for high: ”
#define CS_DQUHR   0x201C //    ''     ,    ''       ,     ''       ,       ,,       ,     ''      , "R" for reverse: “
#define CS_DQUL    0x201E //    ''     ,    ''       ,                               , "L" for low: „
#define CS_GUILLE  0xAB //      ''     ,    ''       , "GUIL" for guillemet (French quotation), "LE" for left-pointing: «
#define CS_GUILRI  0xBB //      ''     ,    ''       ,        ''                              , "RI" for right-pointing: »
#define CS_GUILSLE 0x2039 //    ''     ,    ''       ,        ''                              , "S" for simple, "LE" for left-pointing: ‹
#define CS_GUILSRI 0x203A //    ''     ,    ''       ,        ''                              ,     ''        , "RI" for right-pointing: ›
#define CS_HQUOSB  0x201B //    ''     ,    ''       , "H" for high, "QUO" for quote, "S" for single, "B" for begin: ‛
#define CS_HQUOSE  0x2019 //    ''     ,    ''       ,     ''              ''             ''        , "E" for end: ’

     // Unusual parenthesis types
#define CS_OCBRA  0x300c //     ''     ,    ''       , "O" for opening, "C" for corner, "BRA" for bracket:「
#define CS_CCBRA  0x300d //     ''     ,    ''       , "C" for closing,     ''                ''         : 」
#define CS_ODABRA 0x300a //     ''          ''       , "O" for opening, "D" for double, "A" for angled, "BRA" for bracket:《
#define CS_CDABRA 0x300b //     ''     ,    ''       , "C" for closing,     ''              ''                ''         : 》

     // currency
#define CS_LGULDEN  UNICODE_CURRENCY //    ''        , "L" for lower, "GULDEN" for gulden (guilder): ƒ
                // ^ special case for easy user configuration
#define CS_CURREN 0xA4 //       ''     ,        ''   , "CURREN" for currency, 'any currency' symbol: ¤
#define CS_POUND  0xA3 //       ''     ,        ''   , "POUND" for pound: £
#define CS_CENT   0xA2 //       ''     ,        ''   , "CENT" for cent: ¢

    // legal
#define CS_COPY   0xA9 //       ''     ,        ''   , "COPY" for copyright: 
#define CS_COPYL  0x1F12F  //   ''     ,        ''   , "COPY" for Copyright, "L" for left: 
    
     // circle, dots, bullet points
#define CS_BULLET 0x2022 //     ''     ,        ''   , "BULLET" for bullet: •
#define CS_CIRCLE 0x3007 //     ''     ,        ''   , "CIRCLE" for circle: 〇
#define CS_DEGREE 0xB0   //     ''     ,        ''   , "DEGREE" for degree: °
#define CS_ELLIPS 0x2026 //     ''     ,        ''   , "ELLIPS" for bullet: …
#define CS_FINGER 0x261E //     ''     ,        ''   , "FINGER" for finger: ☞
#define CS_MIDDOT 0x00B7 //     ''     ,        ''   , "MIDDOT" for mid dot: ·
#define CS_PARA   0x00A7 //     ''     ,        ''   , "PARA" for paragraaf: §

     // super and sub script numbers
#define CN_0SUB  0x2080 //      ''     , N for number, "SUB" for sub-script or "SUP" for super-script:₀
#define CN_0SUP  0x2070 //      ''     ,    ''       ,                           ''                  :⁰
#define CN_1SUB  0x2081 //      ''     ,    ''       ,        ''                                     :₁
#define CN_1SUP  0xB9   //      ''     ,    ''       ,                           ''                  :¹
#define CN_2SUB  0x2082 //      ''     ,    ''       ,        ''                                     :₂
#define CN_2SUP  0xB2   //      ''     ,    ''       ,                           ''                  :²
#define CN_3SUB  0x2083 //      ''     ,    ''       ,        ''                                     :₃
#define CN_3SUP  0xB3   //      ''     ,    ''       ,                           ''                  :³
#define CN_4SUB  0x2084 //      ''     ,    ''       ,        ''                                     :₄
#define CN_4SUP  0x2074 //      ''     ,    ''       ,                           ''                  :⁴
#define CN_5SUB  0x2085 //      ''     ,    ''       ,        ''                                     :₅
#define CN_5SUP  0x2075 //      ''     ,    ''       ,                           ''                  :⁵
#define CN_6SUB  0x2086 //      ''     ,    ''       ,        ''                                     :₆
#define CN_6SUP  0x2076 //      ''     ,    ''       ,                           ''                  :⁶
#define CN_7SUB  0x2087 //      ''     ,    ''       ,        ''                                     :₇
#define CN_7SUP  0x2077 //      ''     ,    ''       ,                           ''                  :⁷
#define CN_8SUB  0x2088 //      ''     ,    ''       ,        ''                                     :₈
#define CN_8SUP  0x2078 //      ''     ,    ''       ,                           ''                  :⁸
#define CN_9SUB  0x2089 //      ''     ,    ''       ,        ''                                     :₉
#define CN_9SUP  0x2079 //      ''     ,    ''       ,                           ''                  :⁹

// Exponent symbols
#define CS_CPSUB  0x208E //   ''     ,    ''       , "C" for closing, "P" for paranthesis, "SUB" for subscript: ₎
#define CS_OPSUB  0x208D //   ''     ,    ''       , "O" for opening,     ''             ,       ''           : ₍
#define CS_CPSUP  0x207E //   ''     ,    ''       , "C" for closing,     ''             , "SUP" for superscript: ⁾
#define CS_OPSUP  0x207D //   ''     ,    ''       , "O" for opening:     ''             ,       ''             : ⁽
#define CS_EXPMIN 0x207B //   ''     ,    ''       , "EXP" for exponent, "MIN" for minus : ⁻
#define CS_EXPPLS 0x207A //   ''     ,    ''       ,       ''          , "PLS" for plus : ⁺
// Math
#define CS_ABOUT  0x2248 //   ''     ,    ''       , "ABOUT" for about equal: ≈
#define CS_CUMMU  0x2211 //   ''     ,    ''       , "CUMMU" for cummulative: ∑
#define CS_DIVI   0xF7 //     ''     ,    ''       , "DIVI" for division: ÷
#define CS_EGTHAN 0x2265 //   ''     ,    ''       , "E" for equal, "G" for or-greater, "THAN" for than: ≥
#define CS_ELTHAN 0x2264 //   ''     ,    ''       , "E" for equal, "L" for or-less, "THAN" for than: ≤
#define CS_INFIN  0x221E //   ''     ,    ''       , "INFIN" for infinity: ∞
#define CS_MULT   0xD7 //     ''     ,    ''       , "MULTI" for multiplication: ×
#define CS_NONE   0x2205 //   ''     ,    ''       , "NONE" for empty-set / no-solution: ∅ 
#define CS_PLMI   0xB1   //   ''     ,    ''       , "PLMI" for plus-minus; ±
#define CS_PROM   0x2030 //   ''     ,    ''       , "PROM" for promille: ‰
#define CS_PROTT  0x2031 //   ''     ,    ''       , "PRO" for pro-, "TT" for ten-thousandth: ‱
#define CS_SQRT   0x221A //   ''     ,    ''       , "SQRT" for square root: √
#define CS_UNEQL  0x2260 //   ''     ,    ''       , "UNEQL" for unequal: ≠
 
# ifdef POINT_ON_CHECKBOXES
    // pointers
#     define CS_CHECK_H 0x2B9B // ''     ,    ''       , "H" for Down,          ''      : ⮛
#     define CS_CHECK_B 0x2B98 // ''     ,    ''       , "L" for Left, "ARROW" for arrow: ⮘
#     define CS_CHECK_Y 0x2B9A // ''     ,    ''       , "R" for Right,         ''      : ⮚
#     define CS_CHECK_N 0x2B99 // ''     ,    ''       , "U" for UP,            ''      : ⮙
# else
    // checkboxes
#     define CS_CHECK_H 0x1F5F9 // ''  ,    ''       , "CHECK" for check mark, "H" for heavy: 🗹
#     define CS_CHECK_B 0x2610 //  ''  ,    ''       ,         ''            , "B" for blank: ☐ 
#     define CS_CHECK_Y 0x2611 //  ''  ,    ''       ,         ''            , "Y" for yes: ☑ 
#     define CS_CHECK_N 0x2612 //  ''  ,    ''       ,         ''            , "N" for no: ☒ 
# endif

// More arrows
#define CS_ARR_DN 0x2B07 //     ''     ,    ''       , "ARR" for arrow, "DN" for down: ⬇
#define CS_ARR_LE 0x2B05 //     ''     ,    ''       , "ARR" for arrow, "LE" for left: ⬅
#define CS_ARR_RI 0x27A1 //     ''     ,    ''       , "ARR" for arrow, "RI" for right: ➡
#define CS_ARR_UP 0x2B06 //     ''     ,    ''       , "ARR" for arrow, "UP" for up: ⬆

// More checkmarks
#define CS_BOTCH 0x2717 //      ''     ,    ''       , "BOTCH" for botched: ✗
#define CS_CHECK 0x2713 //      ''     ,    ''       , "CHECK" for check mark: ✓

// circled numbers
#define CN_0CIRC  0x24EA //   ''     , "N" for number, "0" for , "CIRC" for circled: ⓪
#define CN_1CIRC  0x2460 //   ''     ,     ''        , "1" for 1, "CIRC" for circled: ①
#define CN_2CIRC  0x2461 //   ''     ,     ''        , "2" for 2, "CIRC" for circled: ②
#define CN_3CIRC  0x2462 //   ''     ,     ''        , "3" for 3, "CIRC" for circled: ③
#define CN_4CIRC  0x2463 //   ''     ,     ''        , "4" for 4, "CIRC" for circled: ④
#define CN_5CIRC  0x2464 //   ''     ,     ''        , "5" for 5, "CIRC" for circled: ⑤
#define CN_6CIRC  0x2465 //   ''     ,     ''        , "6" for 6, "CIRC" for circled: ⑥
#define CN_7CIRC  0x2466 //   ''     ,     ''        , "7" for 7, "CIRC" for circled: ⑦
#define CN_8CIRC  0x2467 //   ''     ,     ''        , "8" for 8, "CIRC" for circled: ⑧
#define CN_9CIRC  0x2468 //   ''     ,     ''        , "9" for 9, "CIRC" for circled: ⑨
#define CN_10CIRC 0x2469 //   ''     ,     ''        , "10" for 10, "CIRC" for circled: ⑩
#define CN_11CIRC 0x246A //   ''     ,     ''        , "11" for 11, "CIRC" for circled: ⑪
#define CN_12CIRC 0x246B //   ''     ,     ''        , "12" for 12, "CIRC" for circled: ⑫
#define CN_13CIRC 0x246C //   ''     ,     ''        , "13" for 13, "CIRC" for circled: ⑬
#define CN_14CIRC 0x246D //   ''     ,     ''        , "14" for 14, "CIRC" for circled: ⑭
#define CN_15CIRC 0x246E //   ''     ,     ''        , "15" for 15, "CIRC" for circled: ⑮
#define CN_16CIRC 0x246F //   ''     ,     ''        , "16" for 16, "CIRC" for circled: ⑯
#define CN_17CIRC 0x2470 //   ''     ,     ''        , "17" for 17, "CIRC" for circled: ⑰
#define CN_18CIRC 0x2471 //   ''     ,     ''        , "18" for 18, "CIRC" for circled: ⑱
#define CN_19CIRC 0x2472 //   ''     ,     ''        , "19" for 19, "CIRC" for circled: ⑲

// Box drawings
#define CB_C_LEDN 0x2513 //   ''     , "B" for box drawing, "C" for corner, "LE" for left, "DN" for down: ┓
#define CB_C_LEUP 0x251B //   ''     ,     ''             , "C" for corner, "LE" for left, "UP" for up: ┛
#define CB_C_RIDN 0x250F //   ''     ,     ''             , "C" for corner, "RI" for right, "DN" for down: ┏
#define CB_C_RIUP 0x2517 //   ''     ,     ''             , "C" for corner, "RI" for right, "UP" for up: ┗
#define CB_VE     0x2503 //   ''     ,     ''             , "VE" for verticle: ┃
#define CB_VE_BI  0x254B //   ''     ,     ''             , "VE" for verticle, "BI" for bi (two): ╋
#define CB_VE_DOT 0x2507 //   ''     ,     ''             , "VE" for verticle, "DOT" for dotted: ┇
#define CB_VE_LE  0x252B //   ''     ,     ''             , "VE" for verticle, "LE" for left: ┫
#define CB_VE_RI  0x2523 //   ''     ,     ''             , "VE" for verticle, "RI" for right: ┣
// Horizontal lines, can be used with box drawings
#define CB_HHORI  0x2501 //   ''     ,     ''             , "H" for heavy,         ''           : ━
#define CB_HHORID 0x2505 //   ''     ,     ''             , "H" for heavy,         ''           , "D" for dashes: ┅
#define CB_LHORI  0x2500 //   ''     ,     ''             , "L" for light, "HORI" for horizontal: ─
#define CB_LHORID 0x2504 //   ''     ,     ''             , "L" for light,         ''           , "D" for dashes: ┄

// Signs, unusual
#define CS_ALERT 0x26A0 //    ''     , "S" for symbol, "ALERT" for alert/warning: ⚠
#define CS_STARB 0x2605 //    ''     ,    ''         , "STAR" for star, "B" for big: ★
#define CS_STARL 0x66D  //    ''     ,    ''         , "STAR" for star, "L" for little: ٭
#define CS_FLEUR 0x2766 //    ''     ,    ''         , "FLEUR" for fleur (flower): ❦
#define CS_HEART 0x2665 //    ''     ,    ''         , "HEART" for heart: ♥