]> Pileus Git - ~andy/gtk/blob - gdk/gen-keyname-table.pl
GtkToolPalette: docs: Minor English corrections.
[~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 @translate = ();
11 while (defined($_ = <IN>)) {
12     next if /^!/;
13     if (!/^\s*(0x[0-9a-f]+)\s+([\w_]*\S)\s+(1)?\s*$/) {
14         die "Cannot parse line $_";
15     }
16
17     push @keys, [$1, $2];
18
19     if (defined ($3)) {
20         push @translate, $2;
21     }
22 }
23
24 $offset = 0;
25
26 $date = gmtime;
27
28 print <<EOT;
29 /* keyname-table.h: Generated by gen-keyname-table.pl from keynames.txt
30  *
31  *  Date: $date
32  *
33  * Do not edit.   
34  */
35 static const char keynames[] =
36 EOT
37
38 for $key (@keys) {
39     $name = $key->[1];
40
41     if ($offset != 0) {
42         print qq(\n);
43     }
44     print qq(  "$name\\0");
45
46     $key->[3] = $offset;
47     $offset += length($name) + 1;
48 }
49
50 print ";\n\n";
51
52 print <<EOT;
53 typedef struct {
54     guint  keyval;
55     guint  offset;
56 } gdk_key;
57
58 static const gdk_key gdk_keys_by_keyval[] = {
59 EOT
60
61 $i = 0;
62 for $key (@keys) {
63     $keyval = $key->[0];
64     $name = $key->[1];
65     $offset = $key->[3];
66
67     if ($i != 0) {
68         print ",\n";
69     }
70     print "  { $keyval, $offset }";
71     $i++;
72 }
73
74 print "\n};\n\n";
75
76 @keys = sort { $a->[1] cmp $b->[1] } @keys;
77
78
79 print <<EOT;
80 static const gdk_key gdk_keys_by_name[] = {
81 EOT
82
83 $i = 0;
84 for $key (@keys) {
85     $keyval = $key->[0];
86     $name = $key->[1];
87     $offset = $key->[3];
88
89     if ($i != 0) {
90         print ",\n";
91     }
92     print "  { $keyval, $offset }";
93     $i++;
94 }
95
96 print <<EOT;
97 };
98
99
100 #if 0
101
102 EOT
103
104 for $key (@translate) {
105     print <<EOT;
106 N_("keyboard label|$key")
107 EOT
108
109
110 print <<EOT;
111
112 #endif
113 EOT
114