Blame gdk/gen-keyname-table.pl

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