X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;ds=inline;f=misc%2Ftranslator%2Fxgettext.pl;h=f7a940b8cd1ba387c1fd6383f49f6b86fde67884;hb=1ffbd262b3479d46cb9afc91b26fdb4ff9c04a42;hp=996b952db6469bd4c2ea54b2bdccb37efbcf2336;hpb=8ad2c7d7acc3cb0033426bd78928214a22ad9dd1;p=koha.git diff --git a/misc/translator/xgettext.pl b/misc/translator/xgettext.pl index 996b952db6..f7a940b8cd 100755 --- a/misc/translator/xgettext.pl +++ b/misc/translator/xgettext.pl @@ -44,12 +44,12 @@ sub token_negligible_p( $ ) { my($x) = @_; my $t = $x->type; return !$extract_all_p && ( - $t == TmplTokenType::TEXT? string_negligible_p( $x->string ): - $t == TmplTokenType::DIRECTIVE? 1: - $t == TmplTokenType::TEXT_PARAMETRIZED + $t == C4::TmplTokenType::TEXT? string_negligible_p( $x->string ): + $t == C4::TmplTokenType::DIRECTIVE? 1: + $t == C4::TmplTokenType::TEXT_PARAMETRIZED && join( '', map { my $t = $_->type; - $t == TmplTokenType::DIRECTIVE? - '1': $t == TmplTokenType::TAG? + $t == C4::TmplTokenType::DIRECTIVE? + '1': $t == C4::TmplTokenType::TAG? '': token_negligible_p( $_ )? '': '1' } @{$x->children} ) eq '' ); } @@ -60,9 +60,9 @@ sub remember ($$) { my($token, $string) = @_; # If we determine that the string is negligible, don't bother to remember unless (string_negligible_p( $string ) || token_negligible_p( $token )) { - my $key = TmplTokenizer::string_canon( $string ); - $text{$key} = [] unless defined $text{$key}; - push @{$text{$key}}, $token; + my $key = TmplTokenizer::string_canon( $string ); + $text{$key} = [] unless defined $text{$key}; + push @{$text{$key}}, $token; } } @@ -83,36 +83,41 @@ sub string_list () { return @t; } -############################################################################### + ############################################################################### sub text_extract (*) { my($h) = @_; for (;;) { - my $s = TmplTokenizer::next_token $h; - last unless defined $s; - my($kind, $t, $attr) = ($s->type, $s->string, $s->attributes); - if ($kind eq TmplTokenType::TEXT) { - remember( $s, $t ) if $t =~ /\S/s; - } elsif ($kind eq TmplTokenType::TEXT_PARAMETRIZED) { - remember( $s, $s->form ) if $s->form =~ /\S/s; - } elsif ($kind eq TmplTokenType::TAG && %$attr) { - # value [tag=input], meta - my $tag = lc($1) if $t =~ /^<(\S+)/s; - for my $a ('alt', 'content', 'title', 'value') { - if ($attr->{$a}) { - next if $a eq 'content' && $tag ne 'meta'; - next if $a eq 'value' && ($tag ne 'input' - || (ref $attr->{'type'} && $attr->{'type'}->[1] =~ /^(?:hidden|radio|submit)$/)); # FIXME - my($key, $val, $val_orig, $order) = @{$attr->{$a}}; #FIXME - $val = TmplTokenizer::trim $val; - remember( $s, $val ) if $val =~ /\S/s; - } + my $s = TmplTokenizer::next_token $h; + last unless defined $s; + my($kind, $t, $attr) = ($s->type, $s->string, $s->attributes); + if ($kind eq C4::TmplTokenType::TEXT) { + if ($t =~ /\S/s && $t !~ /has_js_data) { - for my $t (@{$s->js_data}) { - remember( $s, $t->[3] ) if $t->[0]; # FIXME + } elsif ($kind eq C4::TmplTokenType::TEXT_PARAMETRIZED) { + if ($s->form =~ /\S/s && $s->form !~ /form ); } - } + } elsif ($kind eq C4::TmplTokenType::TAG && %$attr) { + # value [tag=input], meta + my $tag = lc($1) if $t =~ /^<(\S+)/s; + for my $a ('alt', 'content', 'title', 'value','label') { + if ($attr->{$a}) { + next if $a eq 'label' && $tag ne 'optgroup'; + next if $a eq 'content' && $tag ne 'meta'; + next if $a eq 'value' && ($tag ne 'input' + || (ref $attr->{'type'} && $attr->{'type'}->[1] =~ /^(?:hidden|radio|checkbox)$/)); # FIXME + my($key, $val, $val_orig, $order) = @{$attr->{$a}}; #FIXME + $val = TmplTokenizer::trim $val; + remember( $s, $val ) if $val =~ /\S/s; + } + } + } elsif ($s->has_js_data) { + for my $t (@{$s->js_data}) { + remember( $s, $t->[3] ) if $t->[0]; # FIXME + } + } } } @@ -160,20 +165,21 @@ msgstr "" EOF my $directory_re = quotemeta("$directory/"); for my $t (string_list) { - if ($text{$t}->[0]->type == TmplTokenType::TEXT_PARAMETRIZED) { + if ($text{$t}->[0]->type == C4::TmplTokenType::TEXT_PARAMETRIZED) { my($token, $n) = ($text{$t}->[0], 0); printf OUTPUT "#. For the first occurrence,\n" if @{$text{$t}} > 1 && $token->parameters_and_fields > 0; for my $param ($token->parameters_and_fields) { $n += 1; my $type = $param->type; - my $subtype = ($type == TmplTokenType::TAG + my $subtype = ($type == C4::TmplTokenType::TAG && $param->string =~ /^attributes->{'type'}->[1]: undef); my $fmt = TmplTokenizer::_formalize( $param ); $fmt =~ s/^%/%$n\$/; - if ($type == TmplTokenType::DIRECTIVE) { - $type = $param->string =~ /(TMPL_[A-Z]+)+/is? $1: 'ERROR'; + if ($type == C4::TmplTokenType::DIRECTIVE) { +# $type = "Template::Toolkit Directive"; + $type = $param->string =~ /\[%(.*?)%\]/is? $1: 'ERROR'; my $name = $param->string =~ /\bname=(["']?)([^\s"']+)\1/is? $2: undef; printf OUTPUT "#. %s: %s\n", $fmt, @@ -187,7 +193,7 @@ EOF . (defined $value? " value=$value->[1]": ''); } } - } elsif ($text{$t}->[0]->type == TmplTokenType::TAG) { + } elsif ($text{$t}->[0]->type == C4::TmplTokenType::TAG) { my($token) = ($text{$t}->[0]); printf OUTPUT "#. For the first occurrence,\n" if @{$text{$t}} > 1 && $token->parameters_and_fields > 0; @@ -211,9 +217,10 @@ EOF for my $token (@{$text{$t}}) { my $pathname = $token->pathname; $pathname =~ s/^$directory_re//os; + $pathname =~ s/^.*\/koha-tmpl\/(.*)$/$1/; printf OUTPUT "#: %s:%d\n", $pathname, $token->line_number if defined $pathname && defined $token->line_number; - $cformat_p = 1 if $token->type == TmplTokenType::TEXT_PARAMETRIZED; + $cformat_p = 1 if $token->type == C4::TmplTokenType::TEXT_PARAMETRIZED; } printf OUTPUT "#, c-format\n" if $cformat_p; printf OUTPUT "msgid %s\n", TmplTokenizer::quote_po @@ -239,7 +246,7 @@ sub convert_translation_file () { $msgid =~ s/^SELECTED>//; # Create dummy token - my $token = TmplToken->new( $msgid, TmplTokenType::UNKNOWN, undef, undef ); + my $token = TmplToken->new( $msgid, C4::TmplTokenType::UNKNOWN, undef, undef ); remember( $token, $msgid ); $msgstr =~ s/^(?:LIMIT;|LIMITED;)//g; # unneeded for tmpl_process3 $translation{$msgid} = $msgstr unless $msgstr eq '*****'; @@ -339,11 +346,12 @@ usage_error('You cannot specify both --convert-from and --files-from') if (defined $output && $output ne '-') { print STDERR "$0: Opening output file \"$output\"\n" if $verbose_p; - open(OUTPUT, ">$output") || die "$output: $!\n"; + open(OUTPUT, ">$output") || die "$output: $!\n"; } else { print STDERR "$0: Outputting to STDOUT...\n" if $verbose_p; open(OUTPUT, ">&STDOUT"); } +binmode OUTPUT, ':encoding(UTF-8)'; if (defined $files_from) { print STDERR "$0: Opening input file list \"$files_from\"\n" if $verbose_p;