Log-Report-Lexicon
view release on metacpan or search on metacpan
lib/Log/Report/Lexicon/POT.pm view on Meta::CPAN
sub add($)
{ my ($self, $po) = @_;
my $msgid = $po->msgid;
my $index = $self->index;
my $h = $index->{$msgid};
$h or return $index->{$msgid} = $po;
$h = $index->{$msgid} = +{ ($h->msgctxt // '') => $h }
if blessed $h;
my $ctxt = $po->msgctxt // '';
error __x"translation already exists for '{msgid}' with '{ctxt}", msgid => $msgid, ctxt => $ctxt
if $h->{$ctxt};
$h->{$ctxt} = $po;
}
sub translations(;$)
{ my $self = shift;
@_ or return map +(blessed $_ ? $_ : values %$_), values %{$self->index};
error __x"the only acceptable parameter is 'ACTIVE', not '{p}'", p => $_[0]
if $_[0] ne 'ACTIVE';
grep $_->isActive, $self->translations;
}
sub _now() { strftime "%Y-%m-%d %H:%M%z", localtime }
sub header($;$)
{ my ($self, $field) = (shift, shift);
my $header = $self->msgid(MSGID_HEADER)
or error __x"no header defined in POT for file {fn}", fn => $self->filename;
if(!@_)
{ my $text = $header->msgstr(0) || '';
return $text =~ m/^\Q$field\E\:\s*([^\n]*?)\;?\s*$/im ? $1 : undef;
}
my $content = shift;
my $text = $header->msgstr(0);
for($text)
{ if(defined $content)
{ s/^\Q$field\E\:([^\n]*)/$field: $content/im # change
|| s/\z/$field: $content\n/; # new
}
else
{ s/^\Q$field\E\:[^\n]*\n?//im; # remove
}
}
$header->msgstr(0, $text);
$content;
}
sub updated(;$)
{ my $self = shift;
my $date = shift || _now;
$self->header('PO-Revision-Date', $date);
$date;
}
### internal
sub _createHeader(%)
{ my ($self, %args) = @_;
my $date = $args{date} || _now;
my $header = Log::Report::Lexicon::PO->new(msgid => MSGID_HEADER, msgstr => <<__CONFIG);
Project-Id-Version: $args{project}
Report-Msgid-Bugs-To:
POT-Creation-Date: $date
PO-Revision-Date: $date
Last-Translator:
Language-Team:
MIME-Version: 1.0
Content-Type: text/plain; charset=$args{charset}
Content-Transfer-Encoding: 8bit
Plural-Forms: $args{forms}
__CONFIG
my $version = $Log::Report::VERSION || '0.0';
$header->addAutomatic("Header generated with ".__PACKAGE__." $version\n");
$self->index->{&MSGID_HEADER} = $header
if $header;
$header;
}
sub removeReferencesTo($)
{ my ($self, $filename) = @_;
sum map $_->removeReferencesTo($filename), $self->translations;
}
sub keepReferencesTo($)
{ my ($self, $keep) = @_;
sum map $_->keepReferencesTo($keep), $self->translations;
}
sub stats()
{ my $self = shift;
my %stats = (msgids => 0, fuzzy => 0, inactive => 0);
foreach my $po ($self->translations)
{ next if $po->msgid eq MSGID_HEADER;
$stats{msgids}++;
$stats{fuzzy}++ if $po->fuzzy;
$stats{inactive}++ if !$po->isActive && !$po->useless;
}
\%stats;
}
1;
( run in 2.422 seconds using v1.01-cache-2.11-cpan-437f7b0c052 )