digraphs: page metadata in subpage includes
authorMischa POSLAWSKY <perl@shiar.org>
Wed, 21 Feb 2024 21:46:02 +0000 (22:46 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Wed, 6 Mar 2024 00:38:51 +0000 (01:38 +0100)
Standalone xorg replacement without hardcoded html exceptions, and support
to easily define other layouts and options.

digraphs.plp
tools/mkdigraphlist
tools/mkdigraphs-xorg

index 57d0b0f5e53e6975b117d2ceee591d9b783347d2..6e0608c20cd41f9679b9e316f21fafe6d86067b6 100644 (file)
@@ -1,45 +1,34 @@
 <(common.inc.plp)><:
 
-my $mode = ($Request // '') eq 'xorg' || exists $get{xorg};
-my $modename = $mode ? 'X.Org' : 'RFC-1345';
+my $mode = $Request || 'vim';
+my $include = 'digraphs' . ($mode ne 'vim' && "-$mode");
 my $cmp = exists $get{cmp} ? ($get{cmp} // 1) : !!$Request;
 
+my $di = eval { Data($include) } || {};
+warn "error in $include: ", @{$@} if ref $@;
+
 Html({
-       title => 'digraph cheat sheet',
+       title => "$mode digraph cheat sheet",
        version => '1.3',
-       description => [
-               "Complete table of digraph characters from $modename.",
+       description => $di->{description} // [
+               "Complete table of digraph characters from",
+               ($di->{title} // $mode) . ".",
        ],
-       keywords => [qw'
+       keywords => [@{ $di->{keywords} // [] }, qw'
                digraph mnemonic compose composition pair
-               character char glyph table unicode vim xorg x11 x
+               character char glyph table unicode vim
        '],
        stylesheet => [qw'light'],
-       data => [qw( data/digraphs.inc.pl )],
+       data => ["data/$include.json"],
 });
 
-:>
-<h1><:= $modename :> Digraphs</h1>
-
-<p>Character mnemonics following compose key ⎄<:
-say join("\n",
-       $mode ? (
-               ' in the X Window System (Shift+AltGr by default).',
-               'Differences from <a href="/digraphs">RFC-1345</a> are indicated.',
-       ) : (':',
-               'i^k in <a href="/vi">Vim</a>,',
-               '^u^\ in <a href="/readline">Emacs</a>,',
-               '^a^v in <a href="/screen">Screen</a>.',
-               'Similar but different from <a href="/digraphs/xorg">X.Org</a>.',
-       ),
-       'Also see <a href="/unicode">common Unicode</a>.</p>',
+%{$di} or Abort(
+       "Requested digraphs <q>$mode</q> not available",
+       '404 request not found',
 );
-say '<p class="aside">Unofficial <span class="u-l2">proposals</span>',
-       ' are available as <a href="/digraphs.vim">ex commands</a>.' if not $mode;
-:>
 
-<:
-my $di = Data('digraphs');
+say "<h1>$di->{title} Digraphs</h1>";
+say "<p>$_</p>" for $di->{intro} // ();
 
 if (exists $get{v}) {
        # show characters for inverted mnemonics (vim alternatives)
@@ -58,8 +47,8 @@ my @chars2 = (['_'], @chars);  # trailing character (extended set)
 my @columns = !exists $get{split} ? \@chars2 :
        ([@chars2[0, 1, 3, 4, 6]], [@chars2[2, 5, 7]]);
 
-if ($mode) {
-       $di = Data('digraphs-xorg');
+if ($mode eq 'xorg') {
+       #TODO determine character usage from declared keys
        $chars2[0] = [qw( # ^ _ ` ~ )];
        @chars = @chars2;
 }
index 075d564b07d2079abe09a9e84087f2ee1f4cf235..2f6acc8d111ca0588510dd8c5256e6d6ae70d8f5 100755 (executable)
@@ -45,7 +45,18 @@ $table{$_} = [
 ] for sort keys %{$di};
 
 print JSON->new->ascii->canonical->encode({
+       title => 'RFC-1345',
        key  => \%table,
+       intro => join("\n",
+               'Character mnemonics following compose key ⎄:',
+               'i^k in <a href="/vi">Vim</a>,',
+               '^u^\ in <a href="/readline">Emacs</a>,',
+               '^a^v in <a href="/screen">Screen</a>.',
+               'Similar but different from <a href="/digraphs/xorg">X.Org</a>.',
+               'Also see <a href="/unicode">common Unicode</a>.</p>',
+               '<p class="aside">Unofficial <span class="u-l2">proposals</span>',
+               'are available as <a href="/digraphs.vim">ex commands</a>.',
+       ),
        flag => {
                l4 => 'full support',
                l3 => 'vim extension',
index 8df64cdaa41cffe664bca2982dee251894dc011a..edef62de6ef24110d4aeca26733abf5c68335702 100755 (executable)
@@ -52,7 +52,15 @@ while ($_ = readline) {
 }
 
 print JSON->new->canonical->indent->encode({
+       title => 'X.Org',
        key   => \%table,
+       intro => join("\n",
+               'Character mnemonics following compose key ⎄:',
+               'in the X Window System (Shift+AltGr by default).',
+               'Differences from <a href="/digraphs">RFC-1345</a> are indicated.',
+               'Also see <a href="/unicode">common Unicode</a>.',
+       ),
+       keywords => [qw( xorg x11 x )],
        flag  => {
                'l5' => "matching RFC-1345",
                'l4' => "matching proposal",