我有一些Moose類定義了幾個小組的相關方法。我想讓這些組在包裝POD中顯而易見。如何爲Pod :: Weaver方法定義多個小節?
我使用Dist::Zilla
和Pod::Weaver
與=method
命令。是否可以在我的=method
命令之間插入一些=head2-like
命令以獲得所需的效果?
我有一些Moose類定義了幾個小組的相關方法。我想讓這些組在包裝POD中顯而易見。如何爲Pod :: Weaver方法定義多個小節?
我使用Dist::Zilla
和Pod::Weaver
與=method
命令。是否可以在我的=method
命令之間插入一些=head2-like
命令以獲得所需的效果?
我寫了一篇文章,內容如下:Redis::Client這裏:Falling in Love with Pod::Weaver。
最簡單的事情做的就是添加自定義Collect
指令您weaver.ini
並通過給每個類型不同的自定義POD命令,像這樣組織你的方法:
[Collect/FOO METHODS]
command = foo_method
[Collect/BAR METHODS]
command = bar_method
[Collect/BAZ METHODS]
command = baz_method
然後寫您的POD這樣
=foo_method blah blah
和韋弗將自動收集他們自己的=head1
。
如果你想做一些比這更復雜的事情,你可以編寫你自己的Pod :: Weaver插件。要點是搜索已解析的POD中的自定義命令名稱,並通過返回Pod::Elemental對象來轉換它們。這裏是我寫的插件:
package Pod::Weaver::Plugin::RedisLinks;
# ABSTRACT: Add links to Redis documentation
use Moose;
with 'Pod::Weaver::Role::Transformer';
use Data::Dumper;
use Scalar::Util 'blessed';
use aliased 'Pod::Elemental::Element::Pod5::Ordinary';
sub transform_document {
my ($self, $doc) = @_;
my @children = $doc->children;
my @new_children;
foreach my $child(@{ $children[0] }) {
if ($child->can('command')
&& $child->command =~ /^(?:key|str|list|hash|set|zset|conn|serv)_method/) {
my $meth_name = $child->content;
$meth_name =~ s/^\s*?(\S+)\s*$/$1/;
my $cmd_name = uc $meth_name;
$cmd_name =~ tr/_/ /;
my $link_name = $meth_name;
$link_name =~ tr/_/-/;
my $new_para = Ordinary->new(
content => sprintf 'Redis L<%s|%s> command.',
$cmd_name, 'http://redis.io/commands/' . $link_name);
push @new_children, $child, $new_para;
next;
}
push @new_children, $child;
}
$doc->children(\@new_children);
}
__PACKAGE__->meta->make_immutable;
1;
transform_document
方法獲取作爲參數傳遞解析的文檔。然後它通過查找標有/^(?:key|str|list|hash|set|zset|conn|serv)_method/
的元素的頂級命令,將這個名稱縮小一些,然後構建一個新的POD段落,其中包含我想要的格式化的POD內容。
謝謝你的快速和有益的答案,波多!現在,第一種方法對我來說足夠好,但我很欣賞第二種方法的可能性。 –
沒問題 - 與織女玩得開心。這是一個非常棒的工具。 – friedo