]> Pileus Git - ~andy/gtk/blob - gdk/gen-keyname-table.pl
Convert the gdk keyval-keyname tables to a big string + offsets. (#168901)
[~andy/gtk] / gdk / gen-keyname-table.pl
1 #!/usr/bin/perl -w
2
3 if (@ARGV != 1) {
4     die "Usage: gen-keyname-table.pl keynames.txt > keyname-table.h\n";
5 }
6
7 open IN, $ARGV[0] || die "Cannot open $ARGV[0]: $!\n";
8
9 @keys = ();
10 while (defined($_ = <IN>)) {
11     next if /^!/;
12     if (!/^\s*(0x[0-9a-f]+)\s+(.*\S)\s+$/) {
13         die "Cannot parse line $_";
14     }
15
16     push @keys, [$1, $2];
17 }
18
19 $offset = 0;
20
21 $date = gmtime;
22
23 print <<EOT;
24 /* keyname-table.h: Generated by gen-keyname-table.pl from keynames.txt
25  *
26  *  Date: $date
27  *
28  * Do not edit.   
29  */
30 static const char keynames[] =
31 EOT
32
33 for $key (@keys) {
34     $name = $key->[1];
35
36     if ($offset != 0) {
37         print qq(\n);
38     }
39     print qq(  "$name\\0");
40
41     $key->[3] = $offset;
42     $offset += length($name) + 1;
43 }
44
45 print ";\n\n";
46
47 print <<EOT;
48 typedef struct {
49     guint  keyval;
50     guint  offset;
51 } gdk_key;
52
53 static const gdk_key gdk_keys_by_keyval[] = {
54 EOT
55
56 $i = 0;
57 for $key (@keys) {
58     $keyval = $key->[0];
59     $name = $key->[1];
60     $offset = $key->[3];
61
62     if ($i != 0) {
63         print ",\n";
64     }
65     print "  { $keyval, $offset }";
66     $i++;
67 }
68
69 print "\n};\n\n";
70
71 @keys = sort { $a->[1] cmp $b->[1] } @keys;
72
73
74 print <<EOT;
75 static const gdk_key gdk_keys_by_name[] = {
76 EOT
77
78 $i = 0;
79 for $key (@keys) {
80     $keyval = $key->[0];
81     $name = $key->[1];
82     $offset = $key->[3];
83
84     if ($i != 0) {
85         print ",\n";
86     }
87     print "  { $keyval, $offset }";
88     $i++;
89 }
90
91 print "\n};\n";
92