keyboard/altgr: unicode semigraphics proposal
[sheet.git] / keyboard / altgr / unigraph.eng.inc.pl
diff --git a/keyboard/altgr/unigraph.eng.inc.pl b/keyboard/altgr/unigraph.eng.inc.pl
new file mode 100644 (file)
index 0000000..03e5161
--- /dev/null
@@ -0,0 +1,89 @@
+use utf8;
+use strict;
+use warnings;
+use Shiar_Sheet::KeyboardChars 'kbchars';
+
+my %rows = qw{
+       +! ๐Ÿ€ +@ ๐Ÿ‚ +# ๐Ÿ… +$ ๐Ÿ‡ +% ๐Ÿ‰ +^ ๐Ÿ +& ๐ŸŽ +* ๐Ÿ +( ๐Ÿ’ +) ๐Ÿ“ +_ ๐Ÿ• ++ ๐Ÿ–
+       +1 โ™™  +2 โ™–  +3 โ™˜  +4 โ™—  +5 โ™•  +6 โ™”  +7 โ™š  +8 โ™›  +9 โ™  +0 โ™ž  +-  โ™œ += โ™Ÿ
+
+       $ โ—‹ 4 โ—  % โ–ก 5 โ–   ^ โ˜† 6 โ˜…  \{ โ˜“
+       & โ™  * โ™ฅ ( โ™ฆ ) โ™ฃ
+       - โ˜บ _ โ˜น = โ˜ป
+       = โ˜ผ + โ˜€
+
+       q โ†– w โ†‘ e โ†—  Q โ‡– W โ‡‘ E โ‡—  +q โ—ค +w โ–ฒ +e โ—ฅ  +Q โ—ธ +W โ–ณ +E โ—น
+       a โ† s โ†” d โ†’  A โ‡ S โ‡” D โ‡’  +a โ—€ +s โ—† +d โ–ถ  +A โ— +S โ—‡ +D โ–ท
+       z โ†™ x โ†“ c โ†˜  Z โ‡™ X โ‡“ C โ‡˜  +z โ—ฃ +x โ–ผ +c โ—ข  +Z โ—บ +X โ–ฝ +C โ—ฟ
+       1 โคก 2 โ†• 3 โคข  ! โ—„ @ โ‡• # โ–บ
+
+       r โ”Œ t โ”ฌ y โ”  R โ•” T โ•ฆ Y โ•—
+       f โ”œ g โ”ผ h โ”ค  F โ•  G โ•ฌ H โ•ฃ
+       v โ”” b โ”ด n โ”˜  V โ•š B โ•ฉ N โ•
+       ' โ”€ \ โ”‚      " โ• | โ•‘      +' โ•Œ +\ โ•Ž  +" โ”ˆ +| โ”Š
+
+       +r โ•’ +R โ•“ +t โ•ค +T โ•ฅ +y โ•• +Y โ•–
+       +f โ•ž +F โ•Ÿ +g โ•ช +G โ•ซ +h โ•ก +H โ•ข
+       +v โ•˜ +V โ•™ +b โ•ง +B โ•จ +n โ•› +N โ•œ
+
+       > โ–› . โ–˜ , โ–€ M โ–œ m โ–
+       l โ–Œ L โ–š k โ–ˆ J โ–ž j โ–  ; โ–Ž : โ–Š  +; ๐Ÿฎ‡ +: ๐ŸฎŠ
+       O โ–™ o โ–– i โ–„ U โ–Ÿ u โ–—  / โ–‚ ? โ–†  +/ ๐Ÿฎ‚ +? ๐Ÿฎ…
+       7 โ–‘ 8 โ–’ 9 โ–“
+       I ๐Ÿฎ™ K ๐Ÿฎ– < ๐Ÿฎ˜
+
+       +i ๐Ÿญฏ +, ๐Ÿญญ +j ๐Ÿญฎ +l ๐Ÿญฌ  +[ ๐Ÿฎš +k ๐Ÿฎ›
+       +u โ•ญ +o โ•ฎ +m โ•ฐ +. โ•ฏ
+
+       +U ๐Ÿฎฃ +I ๐Ÿฎฆ +O ๐Ÿฎข
+       +J ๐Ÿฎฅ +K ๐Ÿฎฎ +L ๐Ÿฎค
+       +M ๐Ÿฎก +< ๐Ÿฎง +> ๐Ÿฎ 
+       p โ•ฑ [ โ•ณ ] โ•ฒ
+       P ๐Ÿฎจ \} ๐Ÿฎฉ  +p ๐Ÿฎซ +] ๐Ÿฎช  +P ๐Ÿฎฌ +\} ๐Ÿฎญ
+};
+$rows{' '} = "\N{FIGURE SPACE}";
+
+# remaining candidates: โ”„โ”† ๐Ÿฎ— ๐Ÿฎ• โ™คโ™งโ™กโ™ข โšโš‘ โœ“โœ” โœ—โœ˜ โ–ฌ
+
+my $groups = kbchars(\%rows);
+
+use Encode 'decode';
+my %cpcompat = (
+       # lower cp437 representations from charset-encoding excluding BEL/BS/CR/LF
+       (map {$_ => 'g3'} split //, 'โ˜บโ˜ปโ™ฅโ™ฆโ™ฃโ™ โ—‹โ™‚โ™€โ™ซโ˜ผโ–บโ—„โ†•โ€ผยถยงโ–ฌโ†จโ†‘โ†“โ†’โ†โˆŸโ†”โ–ฒโ–ผ'),
+       # upper characters converted to unicode
+       (map {$_ => 'g4'} split //, decode('cp437', pack 'C*', 127..255)),
+       (map {$_ => 'g2'} split //, decode('cp850', pack 'C*', 127..255)),
+);
+
+while (my ($k, $c) = each %rows) {
+       $groups->{def}{''}{$k} = $cpcompat{$c} // (
+               $c =~ /\p{In=1.1}/ ? 'g5' :
+               $c =~ /\p{In=6.0}/ ? 'g6' :
+               $c =~ /[\x{1FB00}-\x{1FBFF}]/ ? 'g7' : # Age=V13.0
+               'g0'
+       );
+}
+
++{
+       %{ $groups },
+       version => '1.0',
+       title => 'Unicode semigraphics',
+       category => 'specialized',
+       intro => join("\n",
+               sprintf('Keyboard mode to %s draw character graphics.',
+                       '<span title="without requiring a specialised editor">manually</span>',
+               ),
+               'Inspired by <a href="/keyboard/altgr/msx-graph">MSX graph</a> mode,',
+               'but reimagined for modern Unicode coverage.',
+       ),
+       moderows => '5421-21',
+       flag => {
+               g2 => ['cp850'    => 'shared international repetoire in most DOS code pages'],
+               g3 => ['historic' => 'extended graphics presentations of control characters in cp437 ea'],
+               g4 => ['cp437'    => '<em>ANSI art</em> drawing glyphs in English code page 437 (OEM-US)'],
+               g5 => ['standard' => 'gathered in the original Unicode release in 1993'],
+               g6 => ['extended' => 'later additions accumulated within a decade, mostly Unicode 3.2'],
+               g7 => ['rare'     => 'exceptional <em>symbols for legacy computing</em> in Unicode since <abbr title="Unicode 13.0">2020</abbr>'],
+       },
+}