-printf "q{%s}=>[%s],\n", $_, join(',',
- $di->{$_}, # original code point
- map {"'$_'"}
- $uninfo->{ chr $di->{$_} }->[1], # name
- $vim->{$_}
- ? $rfc->{$_} ? 'u-di' : 'u-prop' # vim+rfc or vim-only
- : 'u-prop ex', # neither
- $uninfo->{ chr $di->{$_} }->[0] =~ s/ u-di| u-prop| ex//gr, # class
- $uninfo->{ chr $di->{$_} }->[4] // (), # string
-) for sort keys %{$di};
-print "}\n";
+$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 <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 => {
+ l5 => 'full support',
+ l4 => 'vim extension',
+ l3 => 'vim v8.0',
+ l2 => 'proposal',
+ l1 => 'not in vim',
+ },
+ flagclass => {
+ l5 => '', # common
+ l3 => 'u-l5', # rare
+ },
+});