source: git/lib/checkshortcut.pl @ 206c976

RELEASE/1.1RELEASE/1.2debug-cidebug-ci-sanitisersstereowalls-data
Last change on this file since 206c976 was 206c976, checked in by Olly Betts <olly@…>, 20 years ago

Sorted out minor problems with message file building and shortcut checking.

git-svn-id: file:///home/survex-svn/survex/branches/survex-1_1@2460 4b37db11-9a0c-4f06-9ece-9ab7cdaee568

  • Property mode set to 100755
File size: 1.3 KB
Line 
1#!/usr/bin/perl -w
2use strict;
3my %menu = ();
4my $srcdir = $ENV{'srcdir'} || '';
5$srcdir .= '/' if $srcdir;
6
7open I, "<$srcdir../src/mainfrm.cc" or die $!;
8while (<I>) {
9    /(\w+)->Append\(.*\(\/\*.*?\*\/(\d+)/ && push @{$menu{$1}}, $2;
10}
11close I;
12
13my $exitcode = 0;
14for my $lang (@ARGV) {
15    $lang =~ s/\.msg$//; # allow en or en.msg
16    my $hdr = "Lang $lang:\n";
17    # .msg files could be in srcdir or build directory when building outside
18    # the source tree
19    open L, "<$srcdir$lang.msg" or open L, "<$lang.msg" or die $!;
20    my $buf;
21    read L, $buf, 20;
22    read L, $buf, 999999;
23    close L;
24    my @msg = split /\0/, $buf;
25    for my $menu (sort keys %menu) {
26        my %sc = ();
27        my $bad = 0;
28        for (@{$menu{$menu}}) {
29            my ($acc) = ($msg[$_] =~ /\@(.)/);
30            if (!defined $acc) {
31                print "Lang $lang : message $_ '$msg[$_]' has no shortcut\n";
32            } else {
33                $acc = lc $acc;
34                if (exists $sc{$acc}) {
35                    if (defined $hdr) {
36                        print $hdr;
37                        $hdr = undef;
38                    }
39                    print "Menu $menu : '$msg[$sc{$acc}]' and '$msg[$_]' both use shortcut '$acc'\n";
40                    $bad = 1;
41                } else {
42                    $sc{$acc} = $_;
43                }
44            }
45        }
46        if ($bad) {
47            print "Unused letters: ", grep {!exists $sc{$_}} ('a' .. 'z'), "\n";
48            $exitcode = 1;
49        }
50    }
51    print "\n" unless defined $hdr;
52}
53exit $exitcode;
Note: See TracBrowser for help on using the repository browser.