keyboard/altgr: proper function to convert char maps
[sheet.git] / keyboard / altgr / eurkey.eng.inc.pl
index f67a4f9a47e205e5ee97e1104c136f4cfa80bac6..b2a98cbc0f422076954109a1891e7a73b4e000a2 100644 (file)
@@ -1,29 +1,55 @@
 use utf8;
 use strict;
 use warnings;
-our %rows = (
+do './keyboard/altgr/groups.inc.pl';
+
+my $V = v1.3;
+
+my $presymbol = $V ge v1.3 ? '\\' : '-';
+my %arrows = (
+       'h' => '←',
+       'H' => '⇐',
+       'j' => '↓',
+       'J' => '⇓',
+       'k' => '↑',
+       'K' => '⇑',
+       'l' => '→',
+       'L' => '⇒',
+       'u' => '↖',
+       'U' => '⇖',
+       'i' => '↗',
+       'I' => '⇗',
+       'n' => '↙',
+       'N' => '⇙',
+       'm' => '↘',
+       'M' => '⇘',
+       '=' => '↔',
+       '+' => '⇔',
+);
+
+my %rows = (
        '1' => '¡',
        '!' => '¹',
        '2' => 'ª',
        '@' => '²',
        '3' => 'º',
        '#' => '³',
-       '4' => '€',
+       '4' => $V ge v1.1 ? '£' : '€',
        '$' => '¥',
-       '5' => '£',
+       '5' => $V ge v1.1 ? '€' : '£',
        '%' => '¢',
        '6' => "\N{COMBINING CIRCUMFLEX ACCENT}",
        '^' => "\N{COMBINING CARON}",
        '7' => "\N{COMBINING RING ABOVE}",
        '&' => "\N{COMBINING MACRON}",
-       '8' => "\N{DOUBLE LOW-9 QUOTATION MARK}", #XXX
-       '*' => "\N{SINGLE LOW-9 QUOTATION MARK}", #XXX
+       '8' => "\N{DOUBLE LOW-9 QUOTATION MARK}",
+       '*' => "\N{SINGLE LOW-9 QUOTATION MARK}",
        '9' => "\N{LEFT DOUBLE QUOTATION MARK}",
        '(' => "\N{LEFT SINGLE QUOTATION MARK}",
        '0' => "\N{RIGHT DOUBLE QUOTATION MARK}",
        ')' => "\N{RIGHT SINGLE QUOTATION MARK}",
-       '-' => '©',
-       '_' => '№',
+       '-' => $V ge v1.3 ? '✓' : '©',
+       '_' => $V ge v1.3 ? '✗' : '№',
        '=' => '×',
        '+' => '÷',
        'q' => 'æ',
@@ -54,9 +80,9 @@ our %rows = (
        'a' => 'ä',
        'A' => 'Ä',
        's' => 'ß',
-       'S' => '¶',
-       'd' => 'ð',
-       'D' => 'Ð',
+       'S' => $V ge v1.3 ? 'ẞ' : '¶',
+       'd' => $V ge v1.2 ? 'đ' : 'ð',
+       'D' => $V ge v1.2 ? 'Đ' : 'Ð',
        'f' => 'è',
        'F' => 'È',
        'g' => 'é',
@@ -69,10 +95,10 @@ our %rows = (
        'K' => 'IJ',
        'l' => 'ø',
        'L' => 'Ø',
-       ';' => "\N{COMBINING DIAERESIS}",
-       ':' => '·', # periodcentered
+       ';' => $V ge v1.2 ? '°' : "\N{COMBINING DIAERESIS}",
+       ':' => '·',
        "'" => "\N{COMBINING ACUTE ACCENT}",
-       '"' => '†',
+       '"' => $V ge v1.2 ? "\N{COMBINING DIAERESIS}" : '†',
        '`' => "\N{COMBINING GRAVE ACCENT}",
        '~' => "\N{COMBINING TILDE}",
 
@@ -91,24 +117,183 @@ our %rows = (
        'n' => 'ñ',
        'N' => 'Ñ',
        'm' => 'Ω',
-       'M' => '±',
+       'M' => '√', # ±
        ',' => 'ò',
        '<' => 'Ò',
        '.' => 'ó',
        '>' => 'Ó',
        '/' => '¿',
+       '?' => '…',
+
+       # greek
+       'ma' => 'α',
+       'mb' => 'β', # v
+       'mg' => 'γ',
+       'md' => 'δ',
+       'me' => 'ε',
+       'mz' => 'ζ',
+       'mi' => 'η',
+       'mh' => 'θ',
+       'mj' => 'ι',
+       'mk' => 'κ',
+       'ml' => 'λ',
+       'mm' => 'μ',
+       'mn' => 'ν',
+       'mx' => 'ξ',
+       'mo' => 'ο',
+       'mp' => 'π',
+       'mr' => 'ρ',
+       'ms' => 'σ',
+       'mt' => 'τ',
+       'my' => 'υ',
+       'mf' => 'φ',
+       'mc' => 'χ',
+       'mw' => 'ψ',
+       'mq' => 'ω', # u
+
+       # suþscript
+       'm1' => '¹',
+       'm2' => '²',
+       'm3' => '³',
+       'm4' => '⁴',
+       'm5' => '⁵',
+       'm6' => '⁶',
+       'm7' => '⁷',
+       'm8' => '⁸',
+       'm9' => '⁹',
+       'm0' => '⁰',
+       'm!' => '₁',
+       'm@' => '₂',
+       'm#' => '₃',
+       'm$' => '₄',
+       'm%' => '₅',
+       'm^' => '₆',
+       'm&' => '₇',
+       'm*' => '₈',
+       'm(' => '₉',
+       'm)' => '₀',
+
+       # maths
+       'M!' => '≠',
+       'M~' => '≈',
+       'M=' => '≝',
+       'M>' => '≥',
+       'M<' => '≤',
+       'M-' => '±',
+       'Mi' => '∞',
+       'Mn' => 'ⁿ',
+       'Mr' => '√',
+       'M3' => '∛',
+       'M4' => '∜',
+       'M%' => '‰',
+
+       'Mf' => 'ƒ',
+       'MS' => '∫',
+       "M'" => '′',
+       'M"' => '″',
+       'Mp' => '∂',
+       'Md' => 'Δ',
+       'MD' => '∇',
+       'M+' => '⊕',
+       'M*' => '⊗',
+       'M^' => '℘',
+
+       'Ms' => '∩',
+       'Mu' => '∪',
+       'MU' => '∖',
+       'MO' => '∅',
+       'Mg' => '⊂',
+       'MG' => '⊃',
+       'Mh' => '⊄',
+       'MH' => '⊅',
+       'Mb' => '⊆',
+       'MB' => '⊇',
+       'Mm' => '∈',
+       'MM' => '∉',
+       'Mk' => '∋',
+       'MK' => '∌',
+
+       'MA' => '∀',
+       'ME' => '∃',
+       'MX' => '∄',
+       'M&' => '∧',
+       'M|' => '∨',
+       'Mc' => '∝',
+       'M.' => '⋅',
+       'Mo' => '∘',
+       'M:' => '∴',
+       'M;' => '∵',
+       'Mz' => '↯',
+       'MF' => '∎',
+
+       'MR' => 'ℝ',
+       'MC' => 'ℂ',
+       'MN' => 'ℕ',
+       'MP' => 'ℙ',
+       'MQ' => 'ℚ',
+       'MZ' => 'ℤ',
+       'M9' => '∟',
+       'M8' => '∠',
+       'M7' => '∡',
+       'Ml' => '∥',
+       'ML' => '∦',
+
+       # symbols
+       '-1' => '¼',
+       '-2' => '½',
+       '-3' => '¾',
+       '-4' => '⅓',
+       '-5' => '⅔',
+       '-c' => '©',
+       '-p' => '℗',
+       '-r' => '®',
+       '-s' => '℠',
+       '-t' => '™',
+
+       '\s' => '§',
+       '\1' => '№',
+       '\2' => '½',
+       '\3' => '⅓',
+       '\4' => '¼',
+       '\5' => '⅔',
+       '\6' => '¾',
+       '\c' => '©',
+       '\p' => '℗',
+       '\r' => '®',
+       '\t' => '™',
+       '\T' => '℠',
+
+       (map { ($presymbol.$_ => $arrows{$_}) } keys %arrows),
 );
 
+my $groups = kbchars(\%rows);
+$groups->{mode} = {
+       ''  => 'option-shifted ⌥',
+       'm' => 'Ω greek prefix ⌥m',
+       'M' => '√ maths prefix ⌥M',
+       $presymbol => "$rows{$presymbol} symbol prefix ⌥$presymbol",
+};
+for my $m (qw' m M ', $presymbol) {
+       $groups->{def}->{''}->{$m} = "g1 mode$m";
+       $groups->{mode}->{$m} //= "mode $m";
+       $groups->{def}->{$m} = {
+               (map {s/^.//r => 'g0'} grep {/^\Q$m/} keys %rows),
+               $m => 'g1 mode',
+       };
+}
+$groups->{flag}->{g1} = ['mode' => "switch to an alternate set of keys"];
+
 +{
-       %{ do 'keyboard/altgr/groups.inc.pl' },
+       %{$groups},
        version => '1.0',
        title => 'EurKEY',
        intro => join("\n",
-               'Resulting <a href="/unicode">selection</a> of <a href="/charset">Unicode</a> characters',
-               "while pressing ⌥ Option (Alt) with Apple's US (or US International) layout",
-               'on <abbr title="at least in Ventura 13.2">macOS</abbr>.',
-               q{An alternative <a href="/keyboard/altgr/macos-abc">ABC Extended</a> is also available.},
-               q{Different from <a href="/keyboard/altgr/windows">AltGr</a> on Windows.},
+               'Third-party proposal <a href="https://eurkey.steffen.bruentjen.eu/">EurKEY</a>',
+               '<abbr title="last updated 2017-05-15">v1.3</abbr> by Steffen Brüntjen',
+               'supporting most European languages while pressing AltGr or ⌥ Option.',
+               'Selectable in <abbr title="distributed with X since 2014">Linux</abbr>',
+               'and available for <a href="/keyboard/altgr/windows">Windows</a>',
+               'or <a href="/keyboard/altgr/macos">macOS</a>.',
        ),
        description => [
                "An interactive map of EurKEY, the European Keyboard Layout.",