From 4c4dff3384ef87a537cb57dd893c9b7a1d3a441d Mon Sep 17 00:00:00 2001 From: Vivek Dasmohapatra Date: Thu, 2 May 2013 23:06:15 +0100 Subject: Improvements to generated output --- utils/split-messages.pl | 65 +++++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 26 deletions(-) diff --git a/utils/split-messages.pl b/utils/split-messages.pl index 08d882210..45e55391b 100644 --- a/utils/split-messages.pl +++ b/utils/split-messages.pl @@ -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 "\n\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 "" . encode_entities($val, '<>&"') . "\n"; -# } -# } -# } -# print ""; -#} +{ + package msgfmt::android; + + sub header { qq|\n\n| } + sub footer { qq|| } + sub format + { + use HTML::Entities qw(encode_entities); + my $escaped = encode_entities( $_[1], '<>&"' ); + qq| $escaped\n|; + } +} -- cgit v1.2.3