rockbox/tools/binlang

110 lines
2.5 KiB
Text
Raw Normal View History

#!/usr/bin/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;
}
my $english = $ARGV[0];
my $input = $ARGV[1];
my $output = $ARGV[2];
my $idnum=0;
open(ENG, "<$english");
open(LANG, "<$input");
open(OFILE, ">$output");
my $langversion = 1;
binmode OFILE;
printf OFILE ("\x1a%c", $langversion); # magic lang file header
#
# We scan the english file to get the correct order of the id numbers
#
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'};
}
$value =~ s/^\"(.*)\"/$1/g;
$idnum = $idnum{$set{'id'}};
printf OFILE ("%c%c%s\x00",
($idnum>>8), ($idnum&0xff),
$value);
undef %set;
}
}
}
close(LANG);
close(OFILE);