Improvements to generated output

This commit is contained in:
Vivek Dasmohapatra 2013-05-02 23:06:15 +01:00 committed by Vincent Sanders
parent 98369b74e2
commit 4c4dff3384
1 changed files with 39 additions and 26 deletions

View File

@ -49,7 +49,7 @@ my %opt = qw( plat any format messages );
sub input_stream ();
sub output_stream ();
sub formatter ();
sub header ();
sub static_section($);
sub usage ();
sub main ()
@ -58,6 +58,7 @@ sub main ()
my $output;
my $format;
my $header;
my $footer;
my $opt_ok;
# option parsing:
@ -74,7 +75,8 @@ sub main ()
$input = input_stream();
$output = output_stream();
$format = formatter();
$header = header();
$header = static_section('header');
$footer = static_section('footer');
}
# double check the options are sane (and we weren't asked for the help)
@ -100,7 +102,7 @@ sub main ()
$opt{plat} eq $plat ||
'all' eq $plat )
{
print( $output $format->( $key, $val ), "\n" );
print( $output $format->( $key, $val ) );
}
}
else
@ -108,6 +110,8 @@ sub main ()
warn( "Malformed entry: $_" );
}
}
print( $output $footer );
}
main();
@ -169,10 +173,11 @@ sub formatter ()
return $func || die( "No handler found for format '$name'\n" );
}
sub header ()
sub static_section ($)
{
my $name = $opt{format};
my $func = "msgfmt::$name"->UNIVERSAL::can("header");
my $sect = shift();
my $func = "msgfmt::$name"->UNIVERSAL::can( $sect );
return $func ? $func->() : "";
}
@ -181,17 +186,15 @@ sub header ()
{
package msgfmt::java;
# escape characters spec says ' should be escaped here but
# transifex does not recognise it. hence [\\:] and not [\\:']
sub escape { $_[0] =~ s/([\\:])/\\$1/g; $_[0] }
sub format { return join(' = ', $_[0], escape( $_[1] ) ) }
sub escape { $_[0] =~ s/([:'\\])/\\$1/g; $_[0] }
sub format { return join(' = ', $_[0], escape( $_[1] ) ) . "\n" }
sub header { "# autogenerated from " . ($opt{input} || '-stdin-') . "\n" }
}
{
package msgfmt::messages;
package msgfmt::messages; # native netsurf format
sub format { return join( ":", @_ ) }
sub format { return join( ":", @_ ) . "\n" }
sub header
{
my $in = $opt{input} || '-stdin-';
@ -202,6 +205,19 @@ TXT
}
}
{
package msgfmt::transifex;
use base 'msgfmt::java';
# transifex has the following quirks:
# \ processing is buggy - they re-process every \\ as a \
# so \\n, instead or producing literal '\n', is interpreted as \ ^J
# Additionally, although the java properties format specifies
# that ' should be \ escaped, transifex does not allow/support this:
sub escape { $_[0] =~ s/(:|\\(?![abfnrtv]))/\\$1/g; $_[0] }
sub format { return join(' = ', $_[0], escape( $_[1] ) ) . "\n" }
}
########### YAML ###########
#{
# package msgfmt::yaml;
@ -209,18 +225,15 @@ TXT
# print Dump %data;
#}
######## android properties ########
#{
# package msgfmt::android;
# use HTML::Entities;
# print "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n";
# foreach my $lang (sort keys %data) {
# foreach my $plat (sort keys %{$data{$lang}}) {
# foreach my $key (sort keys %{$data{$lang}{$plat}}) {
# my $val = $data{$lang}{$plat}{$key};
# print "<string name=\"$key\">" . encode_entities($val, '<>&"') . "</string>\n";
# }
# }
# }
# print "</resources>";
#}
{
package msgfmt::android;
sub header { qq|<?xml version="1.0" encoding="utf-8"?>\n<resources>\n| }
sub footer { qq|</resources>| }
sub format
{
use HTML::Entities qw(encode_entities);
my $escaped = encode_entities( $_[1], '<>&"' );
qq| <string name="$_[0]">$escaped</string>\n|;
}
}