 aceccd5819
			
		
	
	aceccd5819
	
	
	
		
			
			keyname-table.h was modified by hand, and gen-keyname-table.pl couldn't be used to generate that file again. https://bugzilla.gnome.org/show_bug.cgi?id=662628
		
			
				
	
	
		
			144 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl -w
 | |
| 
 | |
| if (@ARGV != 2) {
 | |
|     die "Usage: gen-keyname-table.pl keynames.txt keynames-translate.txt > keyname-table.h\n";
 | |
| }
 | |
| 
 | |
| open IN, $ARGV[0] || die "Cannot open $ARGV[0]: $!\n";
 | |
| 
 | |
| @keys = ();
 | |
| @translate = ();
 | |
| while (defined($_ = <IN>)) {
 | |
|     next if /^!/;
 | |
|     if (!/^\s*(0x[0-9a-f]+)\s+([\w_]*\S)\s+(1)?\s*$/) {
 | |
| 	die "Cannot parse line $_";
 | |
|     }
 | |
| 
 | |
|     push @keys, [$1, $2];
 | |
| 
 | |
|     if (defined ($3)) {
 | |
| 	push @translate, $2;
 | |
|     }
 | |
| }
 | |
| close IN;
 | |
| 
 | |
| open IN, $ARGV[1] || die "Cannot open $ARGV[1]: $!\n";
 | |
| while (defined($_ = <IN>)) {
 | |
|     next if /^!/;
 | |
|     if (!/^\s*([\w_]*\S)\s+$/) {
 | |
| 	die "Cannot parse line $_";
 | |
|     }
 | |
| 
 | |
|     push @translate, $1;
 | |
| }
 | |
| close IN;
 | |
| 
 | |
| $offset = 0;
 | |
| 
 | |
| $date = gmtime;
 | |
| 
 | |
| print <<EOT;
 | |
| /* keyname-table.h: Generated by gen-keyname-table.pl from keynames.txt
 | |
|  *
 | |
|  *  Date: $date
 | |
|  *
 | |
|  * Do not edit.   
 | |
|  */
 | |
| static const char keynames[] =
 | |
| EOT
 | |
| 
 | |
| for $key (@keys) {
 | |
|     $name = $key->[1];
 | |
| 
 | |
|     if ($offset != 0) {
 | |
| 	print qq(\n);
 | |
|     }
 | |
|     print qq(  "$name\\0");
 | |
| 
 | |
|     $key->[3] = $offset;
 | |
|     $offset += length($name) + 1;
 | |
| }
 | |
| 
 | |
| print ";\n\n";
 | |
| 
 | |
| print <<EOT;
 | |
| typedef struct {
 | |
|     guint  keyval;
 | |
|     guint  offset;
 | |
| } gdk_key;
 | |
| 
 | |
| static const gdk_key gdk_keys_by_keyval[] = {
 | |
| EOT
 | |
| 
 | |
| $i = 0;
 | |
| for $key (@keys) {
 | |
|     $keyval = $key->[0];
 | |
|     $name = $key->[1];
 | |
|     $offset = $key->[3];
 | |
| 
 | |
|     if ($i != 0) {
 | |
| 	print ",\n";
 | |
|     }
 | |
|     print "  { $keyval, $offset }";
 | |
|     $i++;
 | |
| }
 | |
| 
 | |
| print "\n};\n\n";
 | |
| 
 | |
| @keys = sort { $a->[1] cmp $b->[1] } @keys;
 | |
| 
 | |
| 
 | |
| print <<EOT;
 | |
| static const gdk_key gdk_keys_by_name[] = {
 | |
| EOT
 | |
| 
 | |
| $i = 0;
 | |
| for $key (@keys) {
 | |
|     $keyval = $key->[0];
 | |
|     $name = $key->[1];
 | |
|     $offset = $key->[3];
 | |
| 
 | |
|     if ($i != 0) {
 | |
| 	print ",\n";
 | |
|     }
 | |
|     print "  { $keyval, $offset }";
 | |
|     $i++;
 | |
| }
 | |
| 
 | |
| print <<EOT;
 | |
| };
 | |
| 
 | |
| 
 | |
| #if 0
 | |
| 
 | |
| /*
 | |
|  * Translators, the strings in the 'keyboard label' context are
 | |
|  * display names for keyboard keys. Some of them have prefixes like
 | |
|  * XF86 or ISO_ - these should be removed in the translation. Similarly,
 | |
|  * underscores should be replaced by spaces. The prefix 'KP_' stands
 | |
|  * for 'key pad' and you may want to include that in your translation.
 | |
|  * Here are some examples of English translations:
 | |
|  * XF86AudioMute - Audio mute
 | |
|  * Scroll_lock   - Scroll lock
 | |
|  * KP_Space      - Space (keypad)
 | |
|  */
 | |
| EOT
 | |
| 
 | |
| for $key (@translate) {
 | |
|     if ($key eq 'KP_Space') {
 | |
|       print "/* Translators: KP_ means 'key pad' here */\n";
 | |
|     }
 | |
|     if ($key eq 'XF86MonBrightnessUp') {
 | |
|       print "/* Translators: 'Mon' means Monitor here, and the XF86 prefix should be removed */\n";
 | |
|     }
 | |
|     print <<EOT;
 | |
| NC_("keyboard label", "$key")
 | |
| EOT
 | |
| }
 | |
| 
 | |
| print <<EOT;
 | |
| 
 | |
| #endif
 | |
| EOT
 | |
| 
 |