/usr/share/perl5/Pod/Weaver/Plugin/SingleEncoding.pm is in libpod-weaver-perl 4.015-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | package Pod::Weaver::Plugin::SingleEncoding;
# ABSTRACT: ensure that there is exactly one =encoding of known value
$Pod::Weaver::Plugin::SingleEncoding::VERSION = '4.015';
use Moose;
with(
'Pod::Weaver::Role::Dialect',
'Pod::Weaver::Role::Finalizer',
);
use namespace::autoclean;
use Pod::Elemental::Selectors -all;
#pod =head1 OVERVIEW
#pod
#pod The SingleEncoding plugin is a Dialect and a Finalizer.
#pod
#pod During dialect translation, it will look for C<=encoding> directives. If it
#pod finds them, it will ensure that they all agree on one encoding and remove them.
#pod
#pod During document finalization, it will insert an C<=encoding> directive at the
#pod top of the output, using the encoding previously detected. If no encoding was
#pod detected, the plugin's C<encoding> attribute will be used instead. That
#pod defaults to UTF-8.
#pod
#pod If you want to reject any C<=encoding> directive that doesn't match your
#pod expectations, set the C<encoding> attribute by hand.
#pod
#pod No actual validation of the encoding is done. Pod::Weaver, after all, deals in
#pod text rather than bytes.
#pod
#pod =cut
has encoding => (
reader => 'encoding',
writer => '_set_encoding',
isa => 'Str',
lazy => 1,
default => 'UTF-8',
predicate => '_has_encoding',
);
sub translate_dialect {
my ($self, $document) = @_;
my $want;
$want = $self->encoding if $self->_has_encoding;
if ($want) {
$self->log_debug("enforcing encoding of $want in all pod");
}
my $childs = $document->children;
my $is_enc = s_command([ qw(encoding) ]);
for (reverse 0 .. $#$childs) {
next unless $is_enc->( $childs->[ $_ ] );
my $have = $childs->[$_]->content;
$have =~ s/\s+\z//;
if (defined $want) {
my $ok = lc $have eq lc $want
|| lc $have eq 'utf8' && lc $want eq 'utf-8';
confess "expected only $want encoding but found $have" unless $ok;
} else {
$have = 'UTF-8' if lc $have eq 'utf8';
$self->_set_encoding($have);
$want = $have;
}
splice @$childs, $_, 1;
}
return;
}
sub finalize_document {
my ($self, $document, $input) = @_;
my $encoding = Pod::Elemental::Element::Pod5::Command->new({
command => 'encoding',
content => $self->encoding,
});
my $childs = $document->children;
my $is_pod = s_command([ qw(pod) ]); # ??
for (0 .. $#$childs) {
next if $is_pod->( $childs->[ $_ ] );
$self->log_debug('setting =encoding to ' . $self->encoding);
splice @$childs, $_, 0, $encoding;
last;
}
return;
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Plugin::SingleEncoding - ensure that there is exactly one =encoding of known value
=head1 VERSION
version 4.015
=head1 OVERVIEW
The SingleEncoding plugin is a Dialect and a Finalizer.
During dialect translation, it will look for C<=encoding> directives. If it
finds them, it will ensure that they all agree on one encoding and remove them.
During document finalization, it will insert an C<=encoding> directive at the
top of the output, using the encoding previously detected. If no encoding was
detected, the plugin's C<encoding> attribute will be used instead. That
defaults to UTF-8.
If you want to reject any C<=encoding> directive that doesn't match your
expectations, set the C<encoding> attribute by hand.
No actual validation of the encoding is done. Pod::Weaver, after all, deals in
text rather than bytes.
=head1 AUTHOR
Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2016 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
|