source: git/lib/checkshortcut.pl @ 5d4e21e

debug-cidebug-ci-sanitiserswalls-data debian/1.4.1-1
Last change on this file since 5d4e21e was 1065e69, checked in by Olly Betts <olly@…>, 9 years ago

lib/checkshortcut.pl: Strip off accelerator before looking at
shortcuts, and don't offer ellipses as a potential shortcut.

  • Property mode set to 100755
File size: 1.8 KB
RevLine 
[46cb98f]1#!/usr/bin/perl -w
[be891ea]2require 5.008;
3use bytes;
[46cb98f]4use strict;
[be891ea]5
[46cb98f]6my %menu = ();
[aceb53e]7my $srcdir = $ENV{'srcdir'} || '';
8$srcdir .= '/' if $srcdir;
[6deca30]9
10open I, "<$srcdir../src/mainfrm.cc" or die $!;
[46cb98f]11while (<I>) {
[2b65003]12    m!(\w+)->Append[A-Za-z]*\(.*\(/\*.*?\*/(\d+)! && push @{$menu{$1}}, $2;
[46cb98f]13}
14close I;
15
[2b65003]16#for (sort keys %menu) { print "$_:".join("|", @{$menu{$_}})."\n" }
17
[6deca30]18my $exitcode = 0;
[46cb98f]19for my $lang (@ARGV) {
[6deca30]20    $lang =~ s/\.msg$//; # allow en or en.msg
21    my $hdr = "Lang $lang:\n";
22    # .msg files could be in srcdir or build directory when building outside
23    # the source tree
24    open L, "<$srcdir$lang.msg" or open L, "<$lang.msg" or die $!;
[46cb98f]25    my $buf;
26    read L, $buf, 20;
27    read L, $buf, 999999;
28    close L;
29    my @msg = split /\0/, $buf;
30    for my $menu (sort keys %menu) {
[6316bfa]31        my %sc;
32        my %let;
[46cb98f]33        my $bad = 0;
34        for (@{$menu{$menu}}) {
[1065e69]35            my $m = $msg[$_];
36            my ($item) = (split(/\\t/, $m))[0];
37            my ($acc) = ($item =~ /\&([\x00-\x7f]|[\xc2-\xdf].|[\xe0-\xef]..|[\xf0-\xf4]...)/);
[206c976]38            if (!defined $acc) {
[1065e69]39                print "Lang $lang : message $_ '$m' has no shortcut\n";
[d405bab]40                $bad = 1;
[46cb98f]41            } else {
[206c976]42                $acc = lc $acc;
43                if (exists $sc{$acc}) {
44                    if (defined $hdr) {
45                        print $hdr;
46                        $hdr = undef;
47                    }
[1065e69]48                    print "Menu $menu : '$msg[$sc{$acc}]' and '$m' both use shortcut '$acc'\n";
[206c976]49                    $bad = 1;
50                } else {
51                    $sc{$acc} = $_;
52                }
[46cb98f]53            }
[1065e69]54
[6316bfa]55            # Tally available letters
[1065e69]56            while ($item =~ /([A-Za-z]|[\xc2-\xdf].|[\xe0-\xef]..|[\xf0-\xf4]...)/g) {
57                $acc = lc $1;
58                next if $acc eq '…';
59                ++$let{$acc};
[6316bfa]60            }
[46cb98f]61        }
62        if ($bad) {
[6316bfa]63            print "Unused letters: ", grep {!exists $sc{$_}} (sort keys %let), "\n";
64            print "Not-present ASCII letters: ", grep {!exists $let{$_}} ('a' .. 'z'), "\n";
[6deca30]65            $exitcode = 1;
[46cb98f]66        }
67    }
[6deca30]68    print "\n" unless defined $hdr;
[46cb98f]69}
[6deca30]70exit $exitcode;
Note: See TracBrowser for help on using the repository browser.