#!/usr/bin/perl -w use strict; use open ':utf8', ':std'; use PO4Moz::MozDTD; use PO4Moz::MozProp; use PO4Moz::ContentsRDF; use PO4Moz::Manifest; use PO4Moz::InstallRDF; use PO4Moz::HelpFile; use PO4Moz::HelpRDF; use PO4Moz::POfile; sub process_directory { my $base = shift; my $dir = shift; my %entries = @_; return %entries if (!-d "$base/$dir"); opendir DIR, "$base/$dir"; my @direntries = sort(readdir DIR); closedir DIR; foreach my $file (grep { -f "$base/$dir/$_" } @direntries) { %entries = process_file($base, "$dir/$file", %entries); } foreach my $newdir (grep { $_ ne "." && $_ ne ".." && -d "$base/$dir/$_" } @direntries) { %entries = process_directory($base, "$dir/$newdir", %entries); } return %entries; } sub process_file { my $base = shift; my $file = shift; my %entries = @_; $file =~ s/^(\.\/)*//; return %entries if ($file !~ /(\.(dtd|properties|rdf|xhtml)|chrome\.manifest)$/); open F, "<$base/$file"; my @lines = ; close F; my $contents = join "", @lines; my %newentries = ("index" => []); if ($file =~ /\.dtd$/) { %newentries = PO4Moz::MozDTD::parse($file, $contents); } elsif ($file =~ /\.properties$/) { %newentries = PO4Moz::MozProp::parse($file, $contents); } elsif ($file =~ /contents\.rdf$/) { %newentries = PO4Moz::ContentsRDF::parse($file, $contents); } elsif ($file =~ /chrome\.manifest$/) { %newentries = PO4Moz::Manifest::parse($file, $contents); } elsif ($file =~ /install\.rdf$/) { %newentries = PO4Moz::InstallRDF::parse($file, $contents); } elsif ($file =~ /\.xhtml$/) { %newentries = PO4Moz::HelpFile::parse($file, $contents); } elsif ($file =~ /\/help\/.*?\.rdf$/) { %newentries = PO4Moz::HelpRDF::parse($file, $contents); } push @{$entries{"index"}}, @{$newentries{"index"}}; foreach my $k (keys %newentries) { if ($k ne "index") { $entries{$k} = $newentries{$k}; } } return %entries; } my $startdir = $ARGV[0]; if (!$startdir) { print STDERR "Usage: $0 directory > outfile.pot\n"; exit 1; } my %entries = (); %entries = process_directory($startdir, ".", %entries); print PO4Moz::POfile::generate("", %entries);