summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2006-04-02 09:07:24 +0000
committerDaniel Stenberg <daniel@haxx.se>2006-04-02 09:07:24 +0000
commit12e528ccd9f8764e745a4b634cc1d4f798fe44d8 (patch)
tree6d43cc38423aecff00d2d54a96f7ffdb49329674 /tools
parent4ab75786811acffb410263442df3f6ea463f04f5 (diff)
first take at -o for producing a friendly output for the voice-generating
scripts git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9420 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'tools')
-rwxr-xr-xtools/genlang2124
1 files changed, 86 insertions, 38 deletions
diff --git a/tools/genlang2 b/tools/genlang2
index 7d82f21b31..07c866a288 100755
--- a/tools/genlang2
+++ b/tools/genlang2
@@ -44,6 +44,9 @@ Usage: genlang2 [options] <langv2 file>
Specify which target you want the translations/phrases for. Required when
-b or -p is used.
+ -o
+ Voice mode output. Outputs all id: and voice: lines for the given target!
+
-v
Enables verbose (debug) output.
MOO
@@ -69,19 +72,20 @@ my $binary = $b;
my $update = $u;
my $english = $e;
+my $voiceout = $o;
-my $check = ($binary?1:0) + ($prefix?1:0) + ($update?1:0);
+my $check = ($binary?1:0) + ($prefix?1:0) + ($update?1:0) + ($voiceout?1:0);
if($check > 1) {
- print "Please use only one of -p, -u and -b\n";
+ print "Please use only one of -p, -u, -o and -b\n";
exit;
}
if(!$check) {
- print "Please use at least one of -p, -u and -b\n";
+ print "Please use at least one of -p, -u, -o and -b\n";
exit;
}
-if(($binary || $update) && !$english) {
- print "Please use -e too when you use -b or -u\n";
+if(($binary || $update || $voiceout) && !$english) {
+ print "Please use -e too when you use -b, -o or -u\n";
exit;
}
@@ -99,7 +103,6 @@ my %source; # id string to source phrase hash
my %dest; # id string to dest phrase hash
my %voice; # id string to voice phrase hash
-
my $input = $ARGV[0];
my @m;
@@ -163,6 +166,7 @@ sub voice {
parsetarget("voice", \$voice, @_);
}
+my %idmap;
my %english;
if($english) {
# For the cases where the english file needs to be scanned/read, we do
@@ -170,7 +174,7 @@ if($english) {
# -u it is convenient.
my $idnum=0; # start with a true number
- my %idmap;
+ my $vidnum=0x8000; # first voice id
open(ENG, "<$english") || die "can't open $english";
my @phrase;
my $id;
@@ -194,14 +198,17 @@ if($english) {
if($_ =~ /^ *id: ([^ \t\n]+)/i) {
$id=$1;
- # Skip voice-only entries
+ # voice-only entries get a difference range
if($id =~ /^VOICE_/) {
- next;
+ # Assign an ID number to this entry
+ $idmap{$id}=$vidnum;
+ $vidnum++;
+ }
+ else {
+ # Assign an ID number to this entry
+ $idmap{$id}=$idnum;
+ $idnum++;
}
-
- # Assign an ID number to this entry
- $idmap{$id}=$idnum;
- $idnum++;
}
}
close(ENG);
@@ -324,7 +331,7 @@ while(<LANG>) {
if($dest =~ /^none\z/i) {
# "none" as dest means that this entire phrase is to be
# ignored
- print "dest is NONE!\n";
+ #print "dest is NONE!\n";
}
else {
@@ -432,11 +439,11 @@ extern unsigned char *language_strings[];
extern const unsigned char language_builtin[];
/* The enum below contains all available strings */
-enum {
+enum \{
MOO
;
-print CFILE <<MOO
+ print CFILE <<MOO
/* This file was automaticly generated using genlang2, the strings come
from "$input" */
@@ -445,21 +452,21 @@ print CFILE <<MOO
unsigned char *language_strings[LANG_LAST_INDEX_IN_ARRAY];
const unsigned char language_builtin[] =
MOO
- ;
-
- # Output the ID names for the enum in the header file
-my $i;
-for $i (1 .. $idcount) {
- my $name=$idnum[$i - 1]; # get the ID name
-
- $name =~ s/\"//g; # cut off the quotes
+;
- printf HFILE (" %s,\n", $name);
-}
+ # Output the ID names for the enum in the header file
+ my $i;
+ for $i (1 .. $idcount) {
+ my $name=$idnum[$i - 1]; # get the ID name
+
+ $name =~ s/\"//g; # cut off the quotes
+
+ printf HFILE (" %s,\n", $name);
+ }
# Output separation marker for last string ID and the upcoming voice IDs
-print HFILE <<MOO
+ print HFILE <<MOO
LANG_LAST_INDEX_IN_ARRAY, /* this is not a string, this is a marker */
/* --- below this follows voice-only strings --- */
VOICEONLY_DELIMITER = 0x8000,
@@ -467,16 +474,16 @@ MOO
;
# Output the ID names for the enum in the header file
-my $i;
-for $i (0x8000 .. ($voiceid-1)) {
- my $name=$idnum[$i]; # get the ID name
-
- $name =~ s/\"//g; # cut off the quotes
-
- printf HFILE (" %s,\n", $name);
-}
+ my $i;
+ for $i (0x8000 .. ($voiceid-1)) {
+ my $name=$idnum[$i]; # get the ID name
+
+ $name =~ s/\"//g; # cut off the quotes
+
+ printf HFILE (" %s,\n", $name);
+ }
-# Output end of enum
+ # Output end of enum
print HFILE "\n};\n/* end of generated enum list */\n";
# Output the target phrases for the source file
@@ -495,11 +502,11 @@ for $i (0x8000 .. ($voiceid-1)) {
}
# Output end of string chunk
-print CFILE <<MOO
+ print CFILE <<MOO
;
/* end of generated string list */
MOO
- ;
+;
close(HFILE);
close(CFILE);
@@ -534,6 +541,47 @@ elsif($binary) {
}
}
}
+elsif($voiceout) {
+ # voice output requested, display id: and voice: strings in a v1-like
+ # fashion
+
+ my @engl;
+
+ # This loops over the strings in the translated language file order
+ my @ids = ((0 .. ($idcount-1)));
+ push @ids, (0x8000 .. ($voiceid-1));
+
+ #for my $id (@ids) {
+ # print "$id\n";
+ #}
+
+ for $i (@ids) {
+ my $name=$idnum[$i]; # get the ID
+ my $dest = $voice{$name}; # get the destination voice string
+
+ if($dest) {
+ $dest =~ s/^\"(.*)\"\s*$/$1/g; # cut off quotes
+
+ # Now, make sure we get the number from the english sort order:
+ $idnum = $idmap{$name};
+
+ $engl[$idnum] = $i;
+
+ # print "Input index $i output index $idnum\n";
+
+ }
+ }
+ for my $i (@ids) {
+
+ my $o = $engl[$i];
+
+ my $name=$idnum[$o]; # get the ID
+ my $dest = $voice{$name}; # get the destination voice string
+
+ print "#$i\nid: $name\nvoice: $dest\n";
+ }
+
+}
if($verbose) {