digraphs: prepare target characters as strings
authorMischa POSLAWSKY <perl@shiar.org>
Sun, 22 Feb 2015 01:41:57 +0000 (02:41 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Tue, 9 Jun 2015 03:43:42 +0000 (05:43 +0200)
Allows custom representation consisting of multiple characters.

tools/mkcharinfo
tools/mkdigraphlist
tools/mkdigraphs-rfc
tools/mkdigraphs-shiar
tools/mkdigraphs-vim

index dfcd13de1181478bf9274c29932226a64e17e7c8..66f3a0022d94058a525bce55cb90c476e13826b7 100755 (executable)
@@ -8,7 +8,7 @@ no if $] >= 5.018, warnings => 'experimental::smartmatch';
 use open OUT => ':utf8', ':std';
 use Data::Dump 'pp';
 
-our $VERSION = '1.00';
+our $VERSION = '1.01';
 
 my %info = (
        # prepare presentational string for some control(lish) entries
@@ -58,8 +58,8 @@ for (sort keys %diinc) {
                my $cp = $di->{$mnem};
                length $mnem == 2 or next;  # limit to digraphs
                my $class = $diinc{$_};
-               $info{chr $cp}->{di} //= $mnem;
-               $info{chr $cp}->{class}->{$class}++;
+               $info{$cp}->{di} //= $mnem;
+               $info{$cp}->{class}->{$class}++;
        }
 }
 
index e472ce0e0d01a41b5e0f27ef5f16f927c51c4d78..2e6c9191f46414ee7533efa6d97796b846db2783 100755 (executable)
@@ -6,7 +6,7 @@ use utf8;
 
 use open OUT => ':utf8', ':std';
 
-our $VERSION = '1.04';
+our $VERSION = '1.05';
 
 # import and combine various digraph data
 my $rfc = do 'data/digraphs-rfc.inc.pl'
@@ -31,14 +31,14 @@ printf '(map {$_=>0} qw{%s}),'."\n", join(' ',
        map { substr($_, 1, 1).substr($_, 0, 1) } sort keys %{$di}
 );
 printf "q{%s}=>[%s],\n", $_, join(',',
-       $di->{$_},   # original code point
+       ord $di->{$_},   # original code point
        map {"'$_'"}
-       $uninfo->{ chr $di->{$_} }->[1],  # name
+       $uninfo->{ $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
+       $uninfo->{ $di->{$_} }->[0] =~ s/ u-di| u-prop| ex//gr,  # class
+       $uninfo->{ $di->{$_} }->[4] // (),  # string
 ) for sort keys %{$di};
 print "}\n";
 
index 007e7b0441aa758bebede0ddaa4e9bf0ef836d5c..81df0a075f06a0e720a50afb650db7c2ac0d0026 100755 (executable)
@@ -4,49 +4,50 @@ use strict;
 use warnings;
 use utf8;
 use open OUT => ':utf8', ':std';
+use Data::Dump 'pp';
 
-our $VERSION = '1.00';
+our $VERSION = '1.01';
 
 # translation table for deprecated code points
 my %replace = (
        0xE001 => 0,  # join lines: not accepted
        0xE004 => 0,  # umlaut is no different from diaeresis 0x0308
-       0xE005 => 0x0344, # discouraged
-       0xE006 => 0x0300,
-       0xE007 => 0x0301,
-       0xE008 => 0x0302,
-       0xE009 => 0x0303,
-       0xE00A => 0x0304,
-       0xE00B => 0x0306,
-       0xE00C => 0x0307,
-       0xE00D => 0x0308,
-       0xE00E => 0x030A,
-       0xE00F => 0x030B,
-       0xE010 => 0x030C,
-       0xE011 => 0x0327,
-       0xE012 => 0x0328,
-       0xE013 => 0x0332,
-       0xE014 => 0x0333,
-       0xE015 => 0x0338,
-       0xE016 => 0x0345,
-       0xE017 => 0x0314,
-       0xE018 => 0x0313,
-       0xE019 => 0x1FFE,
-       0xE01A => 0x1FBF,
-       0xE01B => 0x03D0,  # middle beta = curled beta?
-       0xE01C => 0x25CB,
-       0xE01D => 0x0192,
-       0xE01E => 0x0292,
-       0xE01F => 0x33C2,  # am, compatibility char
-       0xE020 => 0x33D8,  # pm, compatibility char
-       0xE021 => 0x2121,
-       0xE022 => 0xFE8E,
+       0xE005 => "\x{0344}", # discouraged
+       0xE006 => "\x{0300}",
+       0xE007 => "\x{0301}",
+       0xE008 => "\x{0302}",
+       0xE009 => "\x{0303}",
+       0xE00A => "\x{0304}",
+       0xE00B => "\x{0306}",
+       0xE00C => "\x{0307}",
+       0xE00D => "\x{0308}",
+       0xE00E => "\x{030A}",
+       0xE00F => "\x{030B}",
+       0xE010 => "\x{030C}",
+       0xE011 => "\x{0327}",
+       0xE012 => "\x{0328}",
+       0xE013 => "\x{0332}",
+       0xE014 => "\x{0333}",
+       0xE015 => "\x{0338}",
+       0xE016 => "\x{0345}",
+       0xE017 => "\x{0314}",
+       0xE018 => "\x{0313}",
+       0xE019 => "\x{1FFE}",
+       0xE01A => "\x{1FBF}",
+       0xE01B => "\x{03D0}",  # middle beta = curled beta?
+       0xE01C => "\x{25CB}",
+       0xE01D => "\x{0192}",
+       0xE01E => "\x{0292}",
+       0xE01F => "\x{33C2}",  # am, compatibility char
+       0xE020 => "\x{33D8}",  # pm, compatibility char
+       0xE021 => "\x{2121}",
+       0xE022 => "\x{FE8E}",
        0xE023 => 0,  # dutch guilder 0192 is already encoded, and not very useful anyway
-       0xE024 => 0x0393,
-       0xE025 => 0x20D7,  # also 20D1; non-spacing
-       0xE026 => 0x1FEF,
-       0xE027 => 0x1FC0,
-       0xE028 => 0x01F0, #but uppercase
+       0xE024 => "\x{0393}",
+       0xE025 => "\x{20D7}",  # also 20D1; non-spacing
+       0xE026 => "\x{1FEF}",
+       0xE027 => "\x{1FC0}",
+       0xE028 => "\x{01F0}", #but uppercase
 );
 
 # expect input data source at command line
@@ -90,8 +91,9 @@ for (@line) {
        my ($mnem, $chrhex, $name) = split / +/, $_, 3;
        next if length $mnem != 2;
        my $chrnum = hex $chrhex;
-       $chrnum = $replace{$chrnum} or next if defined $replace{$chrnum};
-       say "q{$mnem}=>$chrnum,";
+       my $chr = $replace{$chrnum} // chr $chrnum or next;
+       my $chrstr = pp $chr;
+       say "q{$mnem} => $chrstr, # $name";
 }
 say '}';
 
index 4f2b75abb88a65879f8ee2e10324859ef59c5065..05399b0aecb12fa911f952f3566173a918452e85 100755 (executable)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 use open IN => ':utf8', ':std';
 
-our $VERSION = '1.00';
+our $VERSION = '1.01';
 
 my $di = do "data/digraphs-rfc.inc.pl"
        or warn "official digraphs not included for comparison: ", $@ // $!;
@@ -14,8 +14,8 @@ say '+{';
 for (readline) {
        my ($mnem, $chr) = m{^([!"%'-Z_a-z]{2}) (.)} or next;
        warn("$mnem already defined"), next if defined $di->{$mnem};
-       my $chrnum = ord $chr;
-       say "q{$1} => $chrnum,";
+       my $chrstr = sprintf '"\x{%x}"', ord $chr;
+       say "q{$mnem} => $chrstr,";
 }
 say '}';
 
index 5386010dd9c4479c551f5772a75fe093da8e97cc..a4bdfe803e8e636ac7d99da5d9c06464c32f3a86 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-VERSION=1.00
+VERSION=1.01
 
 vim -e -c'echo version' -cdigraphs -cq | perl -CSD -nE '
        if ($. == 1) { # head
@@ -10,7 +10,8 @@ vim -e -c'echo version' -cdigraphs -cq | perl -CSD -nE '
                while (/\G(\S\S) (.[^ ]*) +([0-9]+)\s+/g) {
                        my ($mnem, $chr, $cp) = ($1, $2, $3);
                        $mnem =~ s/(?=[\\}])/\\/g;  # escape string delimiter
-                       say "q{$mnem} => $cp,";
+                       $chrstr = sprintf q("\x{%x}"), $cp;
+                       say "q{$mnem} => $chrstr,";
                }
        } END { # foot
                say "}";