#!/usr/bin/env perl use strict; use warnings; use utf8; use open OUT => ':encoding(utf-8)', ':std'; use JSON (); our $VERSION = '1.07'; # import and combine various digraph data push @INC, 'data'; my $rfc = do 'digraphs-rfc.inc.pl' or die "error reading digraphs include: ", $@ // $!; my $extra = do 'digraphs-shiar.inc.pl' or warn "could not include shiar proposals: ", $@ // $!; my $vim = do 'digraphs-vim.inc.pl' or warn "could not include vim extensions ", $@ // $!; my $vimold = do 'digraphs-vim-74.inc.pl' or warn "could not include vim compatibility ", $@ // $!; my $di = { %{$vim // {}}, %{$rfc}, %{$extra // {}} }; # optionally get unicode character information my $uninfo = do 'unicode-char.inc.pl' or warn "could not include unicode details: ", $@ // $!; # output json map of character info my %table; $table{$_} = 0 for ( grep { !defined $di->{$_} } map { substr($_, 1, 1).substr($_, 0, 1) } sort keys %{$di} ); $table{$_} = [ ord $di->{$_}, # original code point $uninfo->{ $di->{$_} }->[1] // '', # name ( $rfc->{$_} ? $vim->{$_} ? 'l5' : 'l1' # vim+rfc or rfc only : $vimold && $vimold->{$_} ? 'l4' # compat vim if known : $vim->{$_} ? 'l3' : 'l2', # vim only or neither ), ($uninfo->{ $di->{$_} }->[0] // '') =~ s/ u-di| u-prop//gr, # class $uninfo->{ $di->{$_} }->[4] // (), # string ] 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 Vim,', '^u^\ in Emacs,', '^a^v in Screen.', 'Similar but different from X.Org.', 'Also see common Unicode.
', 'Unofficial proposals',
'are available as ex commands.',
),
flag => {
l5 => 'full support',
l4 => 'vim extension',
l3 => 'vim v8.0',
l2 => 'proposal',
l1 => 'not in vim',
},
flagclass => {
l5 => '', # common
l3 => 'u-l5', # rare
},
});
__END__
=head1 NAME
mkdigraphlist - Output character list of combined digraph data
=head1 SYNOPSIS
mkdigraphlist | jq -r '.key."DO"[0]' | perl -nE 'say chr' # $
=head1 DESCRIPTION
Combines precompiled digraph includes of rfc (1345), vim, and shiar
and outputs a complete map including character details and usage classes.
The C