Blame gdk/gen-keyname-table.pl

Packit Service fb6fa5
#!/usr/bin/perl -w
Packit Service fb6fa5
Packit Service fb6fa5
if (@ARGV != 1) {
Packit Service fb6fa5
    die "Usage: gen-keyname-table.pl keynames.txt > keyname-table.h\n";
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
open IN, $ARGV[0] || die "Cannot open $ARGV[0]: $!\n";
Packit Service fb6fa5
Packit Service fb6fa5
@keys = ();
Packit Service fb6fa5
@translate = ();
Packit Service fb6fa5
while (defined($_ = <IN>)) {
Packit Service fb6fa5
    next if /^!/;
Packit Service fb6fa5
    if (!/^\s*(0x[0-9a-f]+)\s+([\w_]*\S)\s+(1)?\s*$/) {
Packit Service fb6fa5
	die "Cannot parse line $_";
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
    push @keys, [$1, $2];
Packit Service fb6fa5
Packit Service fb6fa5
    if (defined ($3)) {
Packit Service fb6fa5
	push @translate, $2;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
$offset = 0;
Packit Service fb6fa5
Packit Service fb6fa5
$date = gmtime;
Packit Service fb6fa5
Packit Service fb6fa5
print <
Packit Service fb6fa5
/* keyname-table.h: Generated by gen-keyname-table.pl from keynames.txt
Packit Service fb6fa5
 *
Packit Service fb6fa5
 *  Date: $date
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Do not edit.   
Packit Service fb6fa5
 */
Packit Service fb6fa5
static const char keynames[] =
Packit Service fb6fa5
EOT
Packit Service fb6fa5
Packit Service fb6fa5
for $key (@keys) {
Packit Service fb6fa5
    $name = $key->[1];
Packit Service fb6fa5
Packit Service fb6fa5
    if ($offset != 0) {
Packit Service fb6fa5
	print qq(\n);
Packit Service fb6fa5
    }
Packit Service fb6fa5
    print qq(  "$name\\0");
Packit Service fb6fa5
Packit Service fb6fa5
    $key->[3] = $offset;
Packit Service fb6fa5
    $offset += length($name) + 1;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
print ";\n\n";
Packit Service fb6fa5
Packit Service fb6fa5
print <
Packit Service fb6fa5
typedef struct {
Packit Service fb6fa5
    guint  keyval;
Packit Service fb6fa5
    guint  offset;
Packit Service fb6fa5
} gdk_key;
Packit Service fb6fa5
Packit Service fb6fa5
static const gdk_key gdk_keys_by_keyval[] = {
Packit Service fb6fa5
EOT
Packit Service fb6fa5
Packit Service fb6fa5
$i = 0;
Packit Service fb6fa5
for $key (@keys) {
Packit Service fb6fa5
    $keyval = $key->[0];
Packit Service fb6fa5
    $name = $key->[1];
Packit Service fb6fa5
    $offset = $key->[3];
Packit Service fb6fa5
Packit Service fb6fa5
    if ($i != 0) {
Packit Service fb6fa5
	print ",\n";
Packit Service fb6fa5
    }
Packit Service fb6fa5
    print "  { $keyval, $offset }";
Packit Service fb6fa5
    $i++;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
print "\n};\n\n";
Packit Service fb6fa5
Packit Service fb6fa5
@keys = sort { $a->[1] cmp $b->[1] } @keys;
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
print <
Packit Service fb6fa5
static const gdk_key gdk_keys_by_name[] = {
Packit Service fb6fa5
EOT
Packit Service fb6fa5
Packit Service fb6fa5
$i = 0;
Packit Service fb6fa5
for $key (@keys) {
Packit Service fb6fa5
    $keyval = $key->[0];
Packit Service fb6fa5
    $name = $key->[1];
Packit Service fb6fa5
    $offset = $key->[3];
Packit Service fb6fa5
Packit Service fb6fa5
    if ($i != 0) {
Packit Service fb6fa5
	print ",\n";
Packit Service fb6fa5
    }
Packit Service fb6fa5
    print "  { $keyval, $offset }";
Packit Service fb6fa5
    $i++;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
print <
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
#if 0
Packit Service fb6fa5
Packit Service fb6fa5
EOT
Packit Service fb6fa5
Packit Service fb6fa5
for $key (@translate) {
Packit Service fb6fa5
    print <
Packit Service fb6fa5
N_("keyboard label|$key")
Packit Service fb6fa5
EOT
Packit Service fb6fa5
} 
Packit Service fb6fa5
Packit Service fb6fa5
print <
Packit Service fb6fa5
Packit Service fb6fa5
#endif
Packit Service fb6fa5
EOT
Packit Service fb6fa5