#!/usr/bin/perl -w use strict; use Data::Dumper; my %file_list; sub read_po() { my $po_file = $ARGV[0]; my @arr; open(FH, $po_file) || die("cannot open $po_file"); my $nxt = [ [], "", "" ]; while () { chomp; s/^\s*//; s/\s*$//; if (m/^$/) { my %file; my @lst; for my $r (@{$$nxt[0]}) { next if ($r =~ m|Documentation/cs/|); if ($r =~ m| in (Documentation/.*\.itely)$|) { $file{$1} = 1; } push @lst, $r; } my @Keys = sort keys %file; if (@Keys) { $$nxt[0] = [ @lst ]; push @arr, $nxt; for my $f (@Keys) { if (!defined($file_list{$f})) { $file_list{$f} = []; } my $r = [ $$nxt[1], $$nxt[2] ]; push @{$file_list{$f}}, $r; } } $nxt = [ [], "", "" ]; next; } if (m/^\#/) { push @{$$nxt[0]}, $_; next; } if (m/^msgid\s*\"(.*)\"$/) { my $str = $1; $$nxt[1] = $str; next; } if (m/^msgstr\s*\"(.*)\"$/) { my $str = $1; $$nxt[2] = $str; next; } if (m/^\"(.*)\"$/) { my $str = $1; if ($$nxt[2] eq "") { $$nxt[1] .= $str; } else { $$nxt[2] .= $str; } next; } warn("unhandled data: <$_>"); } close(FH); @arr; } sub print_arr(@) { my @arr = @_; for my $r (@arr) { print join("\n", @{$$r[0]}), "\n"; print "msgid \"$$r[1]\"\n"; print "msgstr \"$$r[2]\"\n"; print "\n"; } } sub mk_subst(@) { my @arr = @_; #print Dumper(\%file_list); my @k = sort keys %file_list; for my $k (@k) { my @val = @{$file_list{$k}}; print "File: $k\n"; for my $r (@val) { print " address@hidden -> address@hidden"; } print "\n"; } } sub main() { my @arr = read_po(); #print_arr(@arr); mk_subst(); } main();