56a6d59237
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3629 a1c6a512-1295-4272-9138-f99709370657
136 lines
3.3 KiB
Perl
Executable file
136 lines
3.3 KiB
Perl
Executable file
#!/usr/bin/env perl
|
|
############################################################################
|
|
# __________ __ ___.
|
|
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
# \/ \/ \/ \/ \/
|
|
# $Id$
|
|
#
|
|
# Copyright (C) 2002 by Daniel Stenberg <daniel@haxx.se>
|
|
#
|
|
# All files in this archive are subject to the GNU General Public License.
|
|
# See the file COPYING in the source tree root for full license agreement.
|
|
#
|
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
# KIND, either express or implied.
|
|
#
|
|
############################################################################
|
|
|
|
if(!$ARGV[0] || !$ARGV[1] || !$ARGV[2]) {
|
|
print <<MOO
|
|
Usage: binlang <english file> <language file> <output file>
|
|
|
|
Generate a binary language file.
|
|
MOO
|
|
;
|
|
exit;
|
|
}
|
|
|
|
if($ARGV[0] eq "-v") {
|
|
shift @ARGV;
|
|
$debug=1;
|
|
}
|
|
|
|
my $english = $ARGV[0];
|
|
my $input = $ARGV[1];
|
|
my $output = $ARGV[2];
|
|
|
|
my $idnum=0;
|
|
|
|
open(ENG, "<$english") or die "Can't open $english";
|
|
open(LANG, "<$input") or die "Can't open $input";
|
|
open(OUTF, ">$output") or die "Can't open $output";
|
|
|
|
my $langversion = 1;
|
|
|
|
binmode OUTF;
|
|
|
|
printf OUTF ("\x1a%c", $langversion); # magic lang file header
|
|
|
|
#
|
|
# We scan the english file to get the correct order of the id numbers
|
|
#
|
|
my $idnum=0; # start with a true number
|
|
while(<ENG>) {
|
|
if($_ =~ / *\#/) {
|
|
# comment
|
|
next;
|
|
}
|
|
# get rid of DOS newlines
|
|
$_ =~ s/\r//g;
|
|
if($_ =~ /^ *([a-z]+): *(.*)/) {
|
|
($var, $value) = ($1, $2);
|
|
$set{$var} = $value;
|
|
|
|
if($var eq "new") {
|
|
# the last one for a single phrase
|
|
$idnum{$set{'id'}}=$idnum;
|
|
$idnum++;
|
|
undef %set;
|
|
}
|
|
}
|
|
}
|
|
close(ENG);
|
|
|
|
while(<LANG>) {
|
|
if($_ =~ /^ *\#/) {
|
|
# comment
|
|
next;
|
|
}
|
|
# get rid of DOS newlines
|
|
$_ =~ s/\r//g;
|
|
if($_ =~ /^ *([a-z]+): *(.*)/) {
|
|
($var, $value) = ($1, $2);
|
|
# print "$var => $value\n";
|
|
|
|
$set{$var} = $value;
|
|
|
|
if($var eq "new") {
|
|
# the last one for a single phrase
|
|
|
|
if(!$value) {
|
|
# if not set, get the english version
|
|
$value = $set{'eng'};
|
|
}
|
|
|
|
if($value =~ s/^\"(.*)\" *$/$1/g) {
|
|
|
|
$idnum = $idnum{$set{'id'}};
|
|
|
|
if($idnum eq "") {
|
|
warn "Found no ".$set{'id'}." in english file!\n";
|
|
}
|
|
else {
|
|
$idnum{$set{'id'}} = '_done_';
|
|
|
|
printf OUTF ("%c%c%s\x00",
|
|
($idnum>>8), ($idnum&0xff),
|
|
$value);
|
|
if($debug) {
|
|
printf("%02x => %s\n", $idnum, $value);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
warn "String for ".$set{'id'}." misses quotes\n";
|
|
}
|
|
|
|
undef %set;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
close(LANG);
|
|
|
|
close(OUTF);
|
|
|
|
foreach $k (keys(%idnum))
|
|
{
|
|
if($idnum{$k} ne '_done_')
|
|
{
|
|
warn "Missing ID in $input: $k\n";
|
|
}
|
|
}
|