88073840277edaefd40c7c6c862ec9ef8a631918
5 use Text
::Balanced
qw(extract_bracketed extract_delimited extract_tagged);
7 @ARGV >= 1 || die "Usage: $0 <source direcory>\n";
35 if( open F
, "find @ARGV -type f '(' -name '*.htm' -o -name '*.lua' ')' |" )
37 while( defined( my $file = readline F
) )
41 if( open S
, "< $file" )
50 while( $text =~ s/ ^ .*? (?:translate|translatef|i18n|_) [\n\s]* \( /(/sgx )
52 ( my $code, $text ) = extract_bracketed
($text, q{('")});
55 $code =~ s/^\([\n\s]*//;
56 $code =~ s/[\n\s]*\)$//;
61 if( $code =~ /^['"]/ )
65 ( $sub, $code ) = extract_delimited
($code, q{'"}, q{\s*(?:\.\.\s*)?});
69 $res .= substr $sub, 1, length($sub) - 2;
73 elsif( $code =~ /^(\[=*\[)/ )
75 my $stag = quotemeta $1;
79 ( $res ) = extract_tagged
($code, $stag, $etag);
85 $res = dec_lua_str
($res);
86 $stringtable{$res}++ if $res;
92 while( $text =~ s/ ^ .*? <% -? [:_] /<%/sgx )
94 ( my $code, $text ) = extract_tagged
($text, '<%', '%>');
98 $code = dec_tpl_str
(substr $code, 2, length($code) - 4);
99 $stringtable{$code}++;
109 if( open C
, "| msgcat -" )
111 printf C
"msgid \"\"\nmsgstr \"Content-Type: text/plain; charset=UTF-8\"\n\n";
113 foreach my $key ( sort keys %stringtable )
118 printf C
"msgid \"%s\"\nmsgstr \"\"\n\n", $key;