From 9445c538bedc82733b7b1c6eb9df7bf9cb54ed64 Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Wed, 21 Feb 2024 21:01:16 +0100 Subject: [PATCH] digraphs/xorg: json include with character info Similar to primary [vim] data so precedence can be preserved as alias class (ignored for now). --- Makefile | 4 ++-- digraphs.plp | 4 ++-- tools/mkdigraphs-xorg | 21 +++++++++++++++------ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index be94112..df6cbe5 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,7 @@ word/put.js: $(download) word/%.min.js: word/%.js uglifyjs -m '' $< -o $@ -data: data/digraphs.json data/unicode-cover.inc.pl data/countries.inc.pl data/browser data/termcol-xcolor.inc.pl data/digraphs-xorg.inc.pl data/unicode-sampler word +data: data/digraphs.json data/unicode-cover.inc.pl data/countries.inc.pl data/browser data/termcol-xcolor.inc.pl data/digraphs-xorg.json data/unicode-sampler word data/DerivedAge.txt: $(download) tools/wget-ifmodified http://www.unicode.org/Public/UNIDATA/$(@F) $@ @@ -53,7 +53,7 @@ data/keysymdef.h: $(download) tools/wget-ifmodified http://gitlab.freedesktop.org/xorg/proto/xorgproto/-/raw/master/include/X11/$(@F) $@ data/keysymdef.json: tools/mkxkeysymdef data/keysymdef.h $(call cmdsave,$^) -data/digraphs-xorg.inc.pl: tools/mkdigraphs-xorg data/xorg-compose data/keysymdef.json +data/digraphs-xorg.json: tools/mkdigraphs-xorg data/xorg-compose data/keysymdef.json $(call cmdsave,$^) data/digraphs-vim.inc.pl: tools/mkdigraphs-vim diff --git a/digraphs.plp b/digraphs.plp index 4ee4d1f..6b1a5c2 100644 --- a/digraphs.plp +++ b/digraphs.plp @@ -58,8 +58,8 @@ my @columns = !exists $get{split} ? \@chars2 : ([@chars2[0, 1, 3, 4, 6]], [@chars2[2, 5, 7]]); if ($mode) { - my $xorg = Data('data/digraphs-xorg'); - $_ = [ord $_] for values %{$xorg}; + my $xorg = Data('digraphs-xorg'); + $_->[3] = undef for values %{$xorg}; # reset alias classes $xorg->{$_}->[2] = # class = compatibility !$di->{key}->{$_} ? 'l2' : # free $di->{key}->{$_}->[0] != $xorg->{$_}->[0] ? 'l1' : # conflict diff --git a/tools/mkdigraphs-xorg b/tools/mkdigraphs-xorg index 90b0d86..ec0e862 100755 --- a/tools/mkdigraphs-xorg +++ b/tools/mkdigraphs-xorg @@ -15,9 +15,11 @@ my $symname = eval { return decode_json(readline $keysymh); } or die "Could not read keysym definitions: $@\n"; -say "# automatically generated by $0"; -say '+{'; +# optionally get unicode character information +my $uninfo = do './data/unicode-char.inc.pl' + or warn "could not include unicode details: ", $@ // $!; +my %table; while ($_ = readline) { my ($mnem, $chr, $trail) = m/\A \h (.*?) \h+ : \h "([^"]+)" \h* (.*)/ or next; @@ -27,12 +29,19 @@ while ($_ = readline) { $mnem =~ s{<([^>]+)> \h?}{$symname->{$1} // die "reference to unknown keysym $1\n"}eg; 1; } or warn($@), next; - $mnem !~ m/[^\x20-\x7F]/ or next; # skip unicode -# (state $seen = {})->{$chr}++ and next; - printf "%s => %s,\n", pp($mnem), pp($chr); + $mnem =~ m/\A [\x20-\x7F]{2} \z/ or next; # only interested in two ascii + my $alias = (state $seen = {})->{$chr}++; # assume first is preferred + $table{$mnem} = [ + ord $chr, + $uninfo->{$chr}->[1] // '', # name + 0, # comparison + $alias ? 'l0 ex' : + ($uninfo->{$chr}->[0] // '') =~ s/ u-di| u-prop| ex//gr, # class + $uninfo->{$chr}->[4] // (), # string + ]; } -say '}'; +print JSON->new->canonical->indent->encode(\%table); __END__ -- 2.30.0