blob: 158c7554591e64c546bea35d344d727f56d1a824 [file] [log] [blame]
Daniel Stenberg97ad4c92002-09-26 09:07:46 +00001#!/usr/bin/env perl
Daniel Stenberge770bc82002-09-24 12:38:00 +00002############################################################################
3# __________ __ ___.
4# Open \______ \ ____ ____ | | _\_ |__ _______ ___
5# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
6# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
7# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
8# \/ \/ \/ \/ \/
9# $Id$
10#
11# Copyright (C) 2002 by Daniel Stenberg <daniel@haxx.se>
12#
13# All files in this archive are subject to the GNU General Public License.
14# See the file COPYING in the source tree root for full license agreement.
15#
16# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
17# KIND, either express or implied.
18#
19############################################################################
20
21if(!$ARGV[0] || !$ARGV[1] || !$ARGV[2]) {
22 print <<MOO
23Usage: binlang <english file> <language file> <output file>
24
25Generate a binary language file.
26MOO
27;
28 exit;
29}
30
Daniel Stenberg53e8d522002-10-29 08:23:33 +000031if($ARGV[0] eq "-v") {
32 shift @ARGV;
33 $debug=1;
34}
35
Daniel Stenberge770bc82002-09-24 12:38:00 +000036my $english = $ARGV[0];
37my $input = $ARGV[1];
38my $output = $ARGV[2];
39
40my $idnum=0;
41
42open(ENG, "<$english");
43open(LANG, "<$input");
44open(OFILE, ">$output");
45
46my $langversion = 1;
47
Daniel Stenberg869c9522002-09-24 12:46:04 +000048binmode OFILE;
49
Daniel Stenberge770bc82002-09-24 12:38:00 +000050printf OFILE ("\x1a%c", $langversion); # magic lang file header
51
52#
53# We scan the english file to get the correct order of the id numbers
54#
Daniel Stenberg53e8d522002-10-29 08:23:33 +000055my $idnum=0; # start with a true number
Daniel Stenberge770bc82002-09-24 12:38:00 +000056while(<ENG>) {
57 if($_ =~ / *\#/) {
58 # comment
59 next;
60 }
61 # get rid of DOS newlines
62 $_ =~ s/\r//g;
63 if($_ =~ / *([a-z]+): *(.*)/) {
64 ($var, $value) = ($1, $2);
65 $set{$var} = $value;
66
67 if($var eq "new") {
68 # the last one for a single phrase
69 $idnum{$set{'id'}}=$idnum;
70 $idnum++;
71 undef %set;
72 }
73 }
74}
75close(ENG);
76
Daniel Stenberge770bc82002-09-24 12:38:00 +000077while(<LANG>) {
78 if($_ =~ / *\#/) {
79 # comment
80 next;
81 }
82 # get rid of DOS newlines
83 $_ =~ s/\r//g;
84 if($_ =~ / *([a-z]+): *(.*)/) {
85 ($var, $value) = ($1, $2);
86 # print "$var => $value\n";
87
88 $set{$var} = $value;
89
90 if($var eq "new") {
91 # the last one for a single phrase
92
93 if(!$value) {
94 # if not set, get the english version
95 $value = $set{'eng'};
96 }
97
Daniel Stenberg4aff85f2002-10-13 10:08:11 +000098 if($value =~ s/^\"(.*)\" *$/$1/g) {
Daniel Stenberge770bc82002-09-24 12:38:00 +000099
Daniel Stenberg1017e252002-10-11 22:01:24 +0000100 $idnum = $idnum{$set{'id'}};
Daniel Stenberge770bc82002-09-24 12:38:00 +0000101
Daniel Stenberg53e8d522002-10-29 08:23:33 +0000102 if($idnum eq "") {
103 warn "Found no ".$set{'id'}." in english file!\n";
104 }
105 else {
106 $idnum{$set{'id'}} = '_done_';
107
108 printf OFILE ("%c%c%s\x00",
109 ($idnum>>8), ($idnum&0xff),
110 $value);
111 if($debug) {
112 printf("%02x => %s\n", $idnum, $value);
113 }
114 }
Daniel Stenberg1017e252002-10-11 22:01:24 +0000115 }
116 else {
117 warn "String for ".$set{'id'}." misses quotes\n";
118 }
Daniel Stenberge770bc82002-09-24 12:38:00 +0000119
120 undef %set;
121 }
122
123 }
124
125}
126close(LANG);
127
128close(OFILE);
Daniel Stenberg97ad4c92002-09-26 09:07:46 +0000129
130foreach $k (keys(%idnum))
131{
132 if($idnum{$k} ne '_done_')
133 {
134 warn "Missing ID in $input: $k\n";
135 }
136}