view release on metacpan or search on metacpan
Revision history for Pod-Weaver
4.020 2024-03-21 13:58:33-04:00 America/New_York
- do not allow Moose::Util::TypeConstraints to turn warnings back on
after they were turned off by experimental.pm! (thanks, Karen
Etheridge)
4.019 2023-01-11 21:59:08-05:00 America/New_York
- update dist metadata
- update a test to pass under Test2::Harness (even though I'm not sure
why I had to!)
4.018 2021-06-19 10:55:10-04:00 America/New_York
- update author contact info
- use postfix dereferencing, since we already require v5.20.0
- add perl support section to docs
4.017 2021-04-17 17:51:31-04:00 America/New_York
- no changes from previous trial release
4.016 2021-04-06 22:22:59-04:00 America/New_York (TRIAL RELEASE)
- GenerateSection by David Miguel Susano Pinto has been bundled with
Pod::Weaver. Although it has been fairly heavily edited, it should
be entirely compatible with previous versions. Thanks, David!
4.015 2016-10-14 20:48:13-04:00 America/New_York
- fix bugs introduced in 4.014 that would cause [Bugs] and [Legal]
to run even when they should've skipped
4.014 2016-09-18 22:25:51-04:00 America/New_York
- make links in [Bugs] use L<> (thanks, David Zurborg!)
- added debug level logging to the weaver, plugins, and
section. GitHub #42. (thanks, Dave Rolsky)
4.013 2016-04-24 23:19:14+01:00 Europe/London
- use text for PPI, not octet
4.012 2015-05-05 21:01:33-04:00 America/New_York
- avoid breaking up words when wrapping text in [Bugs]
4.011 2015-03-17 07:48:54-04:00 America/New_York
- add "header" attributes to more sections, to change the =head1
headert ext (thanks, David Wheeler)
4.010 2014-12-30 22:02:58-05:00 America/New_York
- use of Moose::Autobox has been dropped (thanks Karen Etheridge!)
4.009 2014-12-02 23:00:37-05:00 America/New_York
- when a Collect-worthy header exists (like =head1 METHODS) use it,
rather than making a new one *and* leaving the old one around
(thanks, Christian Walde)
4.008 2014-11-12 09:37:13-05:00 America/New_York
- handle UTF-8 data in PODNAME and ABSTRACT (thanks, Blabos de Blebe)
- Explain Section::Region naming, nonpod, and flattening
(thanks, Kent Fredric)
4.007 2014-10-27 22:21:55-04:00 America/New_York
- immutabilize ALL THE THINGS!
4.006 2014-01-07 20:12:37-05:00 America/New_York
- update tests to pass octets to ->read_string, as is proper
4.005 2013-12-21 15:01:46-0500 America/New_York
- updated tests for the new (fixed, consistent) string behavior in
Mixin::Linewise
4.004 2013-11-05 21:50:13 America/New_York
- allow multi-line formats for VERSION plugin (thanks, Alex Peters)
- ...including the %T-prefix for lines only included in
trial releases
- look for PODNAME more consistently (thanks, Chris Weyl)
- put license filename in F<> formatting (thanks, Alex Peters)
4.003 2013-11-02 22:58:43 America/New_York
- note that [@Default] contains [-SingleEncoding] (thanks, Caleb
Cushing)
4.002 2013-11-02 11:37:04 America/New_York
[ THIS MIGHT BREAK YOUR CODE ]
- stable release of previous v4 changes
4.001 2013-10-20 10:50:50 America/New_York (TRIAL RELEASE)
[ THIS MIGHT BREAK YOUR CODE ]
- SingleEncoding now accepts found =encodings as long as they match,
unless the plugin's encoding attribute was set explicitly
4.000 2013-10-19 17:20:59 America/New_York (TRIAL RELEASE)
[ THIS MIGHT BREAK YOUR CODE ]
- the SingleEncoding plugin to force one consistent =encoding
- ...is now enabled, for UTF-8, in the default configuration
3.101640 2013-09-17 08:57:41 Asia/Tokyo
- fix repository links! argh, oops
3.101639 2013-09-17 08:56:05 Asia/Tokyo
- documentation fix: mention that =func exists in the default
configuration (thanks, Joshua Keroes!)
- removed use of deprecated Class::MOP::load_class (thanks, Karen
Etheridge)
3.101638 2012-08-03 20:42:44 America/New_York
- add more helpful information to the "no document name" error (thanks,
Leto Labs, LLC!)
3.101637 2012-06-07 22:18:55 America/New_York
- add header_command attribute to the Collect section
(thanks, Christopher J. Madsen)
3.101636 2012-05-04 21:28:10 America/New_York
- break the content-generating code in the Version section into its own
method (thanks, Chris Weyl)
3.101635 2012-02-07 22:03:26 America/New_York
- restore the full-document scan for ABSTRACT if not found in a comment
token (thanks, David Golden)
3.101634 2011-10-31 22:56:36 America/New_York
- throw a (helpful?) exception when %m is used in a version format, but
no package was found in the file
- the Legal plugin can now be given the filename in which the dist's
full license can be found (thanks, APOCAL!)
3.101633 2011-09-19 15:48:16 America/New_York
- speed up performance by changing how we use PPI (thanks, Dave Rolsky)
3.101632 2010-10-19 07:49:32 America/New_York
- add missing DateTime prereq
3.101631 2010-10-14 23:00:19 America/New_York
- Name section now looks for a PODNAME comment if no package is found
(hanekomu)
- Added a Bugs section (thanks, David Golden)
- Version, Region, and Generic are all more configurable (thanks,
Apocalypse)
3.101630 2010-06-12 14:42:26 America/New_York
- Author section now emits a normal para or bulleted list (Florian
Ragwitz)
3.101460 2010-05-26 22:36:13 America/New_York
- compat with Config::MVP::Reader v2
3.101450 2010-05-25 18:38:44 America/New_York
- compat with Config::MVP::Reader v1
3.101270 2010-05-07 21:36:45 America/New_York
- allow an explicit header arg to Generic
3.100710 2010-03-12 10:03:42 America/New_York
- further logging improvements; now uses Log::Dispatchouli explicitly
3.100680 2010-03-09 23:38:30 America/New_York
- improve logging delegation to interoperate with recent DZ changes
3.100650 2010-03-06 23:21:19 America/New_York
- expect a Log::Dispatchouli-like logger
- added a means to tweak the configuration loaded during new
- log the file in which errors occur more often
3.100310 2010-01-31 15:32:00 America/New_York
- add =func/FUNCTIONS to match =method and =attr
- require newer Pod::Elemental (to avoid Moose incompat)
3.093530 2009-12-19 22:52:47 America/New_York
- add the -Transformer plugin to allow pass-through for arbitrary
Pod::Elemental::Transformers
3.093130 2009-11-09
- add Config::MVP::Reader::INI to prereq
3.093120 2009-11-08
- fix broken prereq (Config::MVP)
3.093001 2009-10-27
- create @Default and use it to set up the new_with_default_config
3.093000 2009-10-27
- plugins for common preparation: -H1Nester, -EnsurePod5, @CorePrep
"-" as prefix now denotes a non-Section plugin
- tweak weaving phases and methods to add Dialect
3.092990 2009-10-26
- Pod::Weaver::Config and tests for config-from-ini
3.092972 2009-10-24
- no code changes; Pod robuilt
3.092971 2009-10-24
- fixes to make the NAME section "just work"
3.092970 2009-10-24
- total rewrite
1.003 2008-10-??
- use $doc->serialize instead of "$doc" to work with here-docs
1.002 2008-10-13
- add missing prereq (PPI)
1.001 2008-10-12
- fix prereq for testing
1.000 2008-10-12
- first release (at the Pittsburgh Perl Workshop)
This software is copyright (c) 2024 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.
Terms of the Perl programming language system itself
a) the GNU General Public License as published by the Free
Software Foundation; either version 1, or (at your option) any
later version, or
b) the "Artistic License"
--- The GNU General Public License, Version 1, February 1989 ---
This software is Copyright (c) 2024 by Ricardo SIGNES.
This is free software, licensed under:
The GNU General Public License, Version 1, February 1989
GNU GENERAL PUBLIC LICENSE
Version 1, February 1989
Copyright (C) 1989 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The license agreements of most software companies try to keep users
at the mercy of those companies. By contrast, our General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. The
General Public License applies to the Free Software Foundation's
software and to any other program whose authors commit to using it.
You can use it for your programs, too.
When we speak of free software, we are referring to freedom, not
price. Specifically, the General Public License is designed to make
sure that you have the freedom to give away or sell copies of free
software, that you receive source code or can get it if you want it,
that you can change the software or use pieces of it in new free
programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of a such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must tell them their rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any program or other work which
contains a notice placed by the copyright holder saying it may be
distributed under the terms of this General Public License. The
"Program", below, refers to any such program or work, and a "work based
on the Program" means either the Program or any work containing the
Program or a portion of it, either verbatim or with modifications. Each
licensee is addressed as "you".
1. You may copy and distribute verbatim copies of the Program's source
code as you receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice and
disclaimer of warranty; keep intact all the notices that refer to this
General Public License and to the absence of any warranty; and give any
other recipients of the Program a copy of this General Public License
along with the Program. You may charge a fee for the physical act of
transferring a copy.
2. You may modify your copy or copies of the Program or any portion of
it, and copy and distribute such modifications under the terms of Paragraph
1 above, provided that you also do the following:
a) cause the modified files to carry prominent notices stating that
you changed the files and the date of any change; and
b) cause the whole of any work that you distribute or publish, that
in whole or in part contains the Program or any part thereof, either
with or without modifications, to be licensed at no charge to all
third parties under the terms of this General Public License (except
that you may choose to grant warranty protection to some or all
third parties, at your option).
c) If the modified program normally reads commands interactively when
run, you must cause it, when started running for such interactive use
in the simplest and most usual way, to print or display an
announcement including an appropriate copyright notice and a notice
that there is no warranty (or else, saying that you provide a
warranty) and that users may redistribute the program under these
conditions, and telling the user how to view a copy of this General
Public License.
d) You may charge a fee for the physical act of transferring a
copy, and you may at your option offer warranty protection in
exchange for a fee.
Mere aggregation of another independent work with the Program (or its
derivative) on a volume of a storage or distribution medium does not bring
the other work under the scope of these terms.
3. You may copy and distribute the Program (or a portion or derivative of
it, under Paragraph 2) in object code or executable form under the terms of
Paragraphs 1 and 2 above provided that you also do one of the following:
a) accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of
Paragraphs 1 and 2 above; or,
b) accompany it with a written offer, valid for at least three
years, to give any third party free (except for a nominal charge
for the cost of distribution) a complete machine-readable copy of the
corresponding source code, to be distributed under the terms of
Paragraphs 1 and 2 above; or,
c) accompany it with the information you received as to where the
corresponding source code may be obtained. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form alone.)
Source code for a work means the preferred form of the work for making
modifications to it. For an executable file, complete source code means
all the source code for all modules it contains; but, as a special
exception, it need not include source code for modules which are standard
libraries that accompany the operating system on which the executable
file runs, or for standard header files or definitions files that
accompany that operating system.
4. You may not copy, modify, sublicense, distribute or transfer the
Program except as expressly provided under this General Public License.
Any attempt otherwise to copy, modify, sublicense, distribute or transfer
the Program is void, and will automatically terminate your rights to use
the Program under this License. However, parties who have received
copies, or rights to use copies, from you under this General Public
License will not have their licenses terminated so long as such parties
remain in full compliance.
5. By copying, distributing or modifying the Program (or any work based
on the Program) you indicate your acceptance of this license to do so,
and all its terms and conditions.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the original
licensor to copy, distribute or modify the Program subject to these
terms and conditions. You may not impose any further restrictions on the
recipients' exercise of the rights granted herein.
7. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of the license which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
the license, you may choose any version ever published by the Free Software
Foundation.
8. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to humanity, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively convey
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19xx name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the
appropriate parts of the General Public License. Of course, the
commands you use may be called something other than `show w' and `show
c'; they could even be mouse-clicks or menu items--whatever suits your
program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
program `Gnomovision' (a program to direct compilers to make passes
at assemblers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
That's all there is to it!
--- The Perl Artistic License 1.0 ---
This software is Copyright (c) 2024 by Ricardo SIGNES.
This is free software, licensed under:
The Perl Artistic License 1.0
The "Artistic License"
Preamble
The intent of this document is to state the conditions under which a
Package may be copied, such that the Copyright Holder maintains some
semblance of artistic control over the development of the package,
while giving the users of the package the right to use and distribute
the Package in a more-or-less customary fashion, plus the right to make
reasonable modifications.
Definitions:
"Package" refers to the collection of files distributed by the
Copyright Holder, and derivatives of that collection of files
created through textual modification.
"Standard Version" refers to such a Package if it has not been
modified, or has been modified in accordance with the wishes
of the Copyright Holder as specified below.
"Copyright Holder" is whoever is named in the copyright or
copyrights for the package.
"You" is you, if you're thinking about copying or distributing
this Package.
"Reasonable copying fee" is whatever you can justify on the
basis of media cost, duplication charges, time of people involved,
and so on. (You will not be required to justify it to the
Copyright Holder, but only to the computing community at large
as a market that must bear the fee.)
"Freely Available" means that no fee is charged for the item
itself, though there may be fees involved in handling the item.
It also means that recipients of the item may redistribute it
under the same conditions they received it.
1. You may make and give away verbatim copies of the source form of the
Standard Version of this Package without restriction, provided that you
duplicate all of the original copyright notices and associated disclaimers.
2. You may apply bug fixes, portability fixes and other modifications
derived from the Public Domain or from the Copyright Holder. A Package
modified in such a way shall still be considered the Standard Version.
3. You may otherwise modify your copy of this Package in any way, provided
that you insert a prominent notice in each changed file stating how and
when you changed that file, and provided that you do at least ONE of the
following:
a) place your modifications in the Public Domain or otherwise make them
Freely Available, such as by posting said modifications to Usenet or
an equivalent medium, or placing the modifications on a major archive
site such as uunet.uu.net, or by allowing the Copyright Holder to include
your modifications in the Standard Version of the Package.
b) use the modified Package only within your corporation or organization.
c) rename any non-standard executables so the names do not conflict
with standard executables, which must also be provided, and provide
a separate manual page for each non-standard executable that clearly
documents how it differs from the Standard Version.
d) make other distribution arrangements with the Copyright Holder.
4. You may distribute the programs of this Package in object code or
executable form, provided that you do at least ONE of the following:
a) distribute a Standard Version of the executables and library files,
together with instructions (in the manual page or equivalent) on where
to get the Standard Version.
b) accompany the distribution with the machine-readable source of
the Package with your modifications.
c) give non-standard executables non-standard names, and clearly
document the differences in manual pages (or equivalent), together
with instructions on where to get the Standard Version.
d) make other distribution arrangements with the Copyright Holder.
5. You may charge a reasonable copying fee for any distribution of this
Package. You may charge any fee you choose for support of this
Package. You may not charge a fee for this Package itself. However,
you may distribute this Package in aggregate with other (possibly
commercial) programs as part of a larger (possibly commercial) software
distribution provided that you do not advertise this Package as a
product of your own. You may embed this Package's interpreter within
an executable of yours (by linking); this shall be construed as a mere
form of aggregation, provided that the complete Standard Version of the
interpreter is so embedded.
6. The scripts and library files supplied as input to or produced as
output from the programs of this Package do not automatically fall
under the copyright of this Package, but belong to whoever generated
them, and may be sold commercially, and may be aggregated with this
Package. If such scripts or library files are aggregated with this
Package via the so-called "undump" or "unexec" methods of producing a
binary executable image, then distribution of such an image shall
neither be construed as a distribution of this Package nor shall it
fall under the restrictions of Paragraphs 3 and 4, provided that you do
not represent such an executable image as a Standard Version of this
Package.
7. C subroutines (or comparably compiled subroutines in other
languages) supplied by you and linked into this Package in order to
emulate subroutines and variables of the language defined by this
Package shall not be considered part of this Package, but are the
equivalent of input as in Paragraph 6, provided these subroutines do
not change the language in any way that would cause it to fail the
regression tests for the language.
8. Aggregation of this Package with a commercial distribution is always
permitted provided that the use of this Package is embedded; that is,
when no overt attempt is made to make this Package's interfaces visible
to the end user of the commercial distribution. Such use shall not be
construed as a distribution of this Package.
9. The name of the Copyright Holder may not be used to endorse or promote
products derived from this software without specific prior written permission.
10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
The End
# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.031.
Changes
LICENSE
MANIFEST
META.json
META.yml
Makefile.PL
README
dist.ini
lib/Pod/Weaver.pm
lib/Pod/Weaver/Config.pm
lib/Pod/Weaver/Config/Assembler.pm
lib/Pod/Weaver/Config/Finder.pm
lib/Pod/Weaver/Plugin/EnsurePod5.pm
lib/Pod/Weaver/Plugin/H1Nester.pm
lib/Pod/Weaver/Plugin/SingleEncoding.pm
lib/Pod/Weaver/Plugin/Transformer.pm
lib/Pod/Weaver/PluginBundle/CorePrep.pm
lib/Pod/Weaver/PluginBundle/Default.pm
lib/Pod/Weaver/Role/Dialect.pm
lib/Pod/Weaver/Role/Finalizer.pm
lib/Pod/Weaver/Role/Plugin.pm
lib/Pod/Weaver/Role/Preparer.pm
lib/Pod/Weaver/Role/Section.pm
lib/Pod/Weaver/Role/StringFromComment.pm
lib/Pod/Weaver/Role/Transformer.pm
lib/Pod/Weaver/Section/Authors.pm
lib/Pod/Weaver/Section/Bugs.pm
lib/Pod/Weaver/Section/Collect.pm
lib/Pod/Weaver/Section/GenerateSection.pm
lib/Pod/Weaver/Section/Generic.pm
lib/Pod/Weaver/Section/Leftovers.pm
lib/Pod/Weaver/Section/Legal.pm
lib/Pod/Weaver/Section/Name.pm
lib/Pod/Weaver/Section/Region.pm
lib/Pod/Weaver/Section/Version.pm
t/00-report-prereqs.dd
t/00-report-prereqs.t
t/basic.t
t/eg/basic.in.pod
t/eg/basic.out.pod
t/eg/encoding.in.pod
t/eg/encoding.out.pod
t/eg/legal_t1.in.pod
t/eg/legal_t1.out.pod
t/eg/legal_t2.in.pod
t/eg/legal_t2.out.pod
t/eg/region_t1.in.pod
t/eg/region_t1.out.pod
t/eg/region_t2.in.pod
t/eg/region_t2.out.pod
t/eg/region_t3.in.pod
t/eg/region_t3.out.pod
t/eg/region_t4.in.pod
t/eg/region_t4.out.pod
t/eg/version_t1.in.pod
t/eg/version_t1.out.pod
t/eg/version_t2.in.pod
t/eg/version_t2.out.pod
t/eg/version_t3.in.pod
t/eg/version_t3.out.pod
t/eg/version_t4.in.pod
t/eg/version_t4.out.pod
t/eg/version_t5.in.pod
t/eg/version_t5.out.pod
t/eg/version_t6-trial.out.pod
t/eg/version_t6.in.pod
t/eg/version_t6.out.pod
t/eg/version_without_package.in.pod
t/eg/version_without_package.out.pod
t/eg/weaver.ini
t/encoding.t
t/generate-section.t
t/ini-config.t
t/legal_section.t
t/region_options.t
t/required_region.t
t/required_section.t
t/version_options.t
t/version_without_package.t
xt/author/pod-syntax.t
xt/release/changes_has_content.t
{
"abstract" : "weave together a Pod document from an outline",
"author" : [
"Ricardo SIGNES <cpan@semiotic.systems>"
],
"dynamic_config" : 0,
"generated_by" : "Dist::Zilla version 6.031, CPAN::Meta::Converter version 2.150010",
"license" : [
"perl_5"
],
"meta-spec" : {
"url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
"version" : 2
},
"name" : "Pod-Weaver",
"prereqs" : {
"configure" : {
"requires" : {
"ExtUtils::MakeMaker" : "6.78"
}
},
"develop" : {
"requires" : {
"Encode" : "0",
"Test::More" : "0",
"Test::Pod" : "1.41"
}
},
"runtime" : {
"requires" : {
"Config::MVP" : "2",
"Config::MVP::Assembler" : "0",
"Config::MVP::Assembler::WithBundles" : "0",
"Config::MVP::Reader::Finder" : "0",
"Config::MVP::Reader::INI" : "0",
"DateTime" : "0",
"File::Spec" : "0",
"List::MoreUtils" : "0",
"List::Util" : "1.33",
"Log::Dispatchouli" : "1.100710",
"Mixin::Linewise::Readers" : "0.103",
"Module::Runtime" : "0",
"Moose" : "0",
"Moose::Role" : "0",
"Moose::Util::TypeConstraints" : "0",
"Params::Util" : "0",
"Pod::Elemental" : "0.100220",
"Pod::Elemental::Document" : "0",
"Pod::Elemental::Element::Nested" : "0",
"Pod::Elemental::Element::Pod5::Command" : "0",
"Pod::Elemental::Element::Pod5::Ordinary" : "0",
"Pod::Elemental::Element::Pod5::Region" : "0",
"Pod::Elemental::Element::Pod5::Verbatim" : "0",
"Pod::Elemental::Selectors" : "0",
"Pod::Elemental::Transformer::Gatherer" : "0",
"Pod::Elemental::Transformer::Nester" : "0",
"Pod::Elemental::Transformer::Pod5" : "0",
"Pod::Elemental::Types" : "0",
"String::Flogger" : "1",
"String::Formatter" : "0.100680",
"String::RewritePrefix" : "0",
"Text::Template" : "0",
"Text::Wrap" : "0",
"experimental" : "0",
"feature" : "0",
"namespace::autoclean" : "0",
"perl" : "v5.20.0",
"strict" : "0",
"utf8" : "0",
"warnings" : "0"
}
},
"test" : {
"recommends" : {
"CPAN::Meta" : "2.120900"
},
"requires" : {
"ExtUtils::MakeMaker" : "0",
"File::Spec" : "0",
"PPI" : "0",
"Software::License::Artistic_1_0" : "0",
"Software::License::Perl_5" : "0",
"Test::Differences" : "0",
"Test::More" : "0.96"
}
}
},
"release_status" : "stable",
"resources" : {
"bugtracker" : {
"web" : "https://github.com/rjbs/Pod-Weaver/issues"
},
"homepage" : "https://github.com/rjbs/Pod-Weaver",
"repository" : {
"type" : "git",
"url" : "https://github.com/rjbs/Pod-Weaver.git",
"web" : "https://github.com/rjbs/Pod-Weaver"
}
},
"version" : "4.020",
"x_Dist_Zilla" : {
"perl" : {
"version" : "5.038000"
},
"plugins" : [
{
"class" : "Dist::Zilla::Plugin::Prereqs",
"config" : {
"Dist::Zilla::Plugin::Prereqs" : {
"phase" : "runtime",
"type" : "requires"
}
},
"name" : "Prereqs",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::Git::GatherDir",
"config" : {
"Dist::Zilla::Plugin::GatherDir" : {
"exclude_filename" : [],
"exclude_match" : [],
"include_dotfiles" : 0,
"prefix" : "",
"prune_directory" : [],
"root" : "."
},
"Dist::Zilla::Plugin::Git::GatherDir" : {
"include_untracked" : 0
}
},
"name" : "@RJBS/Git::GatherDir",
"version" : "2.049"
},
{
"class" : "Dist::Zilla::Plugin::CheckPrereqsIndexed",
"name" : "@RJBS/CheckPrereqsIndexed",
"version" : "0.022"
},
{
"class" : "Dist::Zilla::Plugin::CheckExtraTests",
"name" : "@RJBS/CheckExtraTests",
"version" : "0.029"
},
{
"class" : "Dist::Zilla::Plugin::PromptIfStale",
"config" : {
"Dist::Zilla::Plugin::PromptIfStale" : {
"check_all_plugins" : 0,
"check_all_prereqs" : 0,
"modules" : [
"Dist::Zilla::PluginBundle::RJBS"
],
"phase" : "build",
"run_under_travis" : 0,
"skip" : []
}
},
"name" : "@RJBS/RJBS-Outdated",
"version" : "0.058"
},
{
"class" : "Dist::Zilla::Plugin::PromptIfStale",
"config" : {
"Dist::Zilla::Plugin::PromptIfStale" : {
"check_all_plugins" : 1,
"check_all_prereqs" : 0,
"modules" : [],
"phase" : "release",
"run_under_travis" : 0,
"skip" : [
"Dist::Zilla::Plugin::RJBSMisc"
]
}
},
"name" : "@RJBS/CPAN-Outdated",
"version" : "0.058"
},
{
"class" : "Dist::Zilla::Plugin::PruneCruft",
"name" : "@RJBS/@Filter/PruneCruft",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::ManifestSkip",
"name" : "@RJBS/@Filter/ManifestSkip",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::MetaYAML",
"name" : "@RJBS/@Filter/MetaYAML",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::License",
"name" : "@RJBS/@Filter/License",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::Readme",
"name" : "@RJBS/@Filter/Readme",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::ExecDir",
"name" : "@RJBS/@Filter/ExecDir",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::ShareDir",
"name" : "@RJBS/@Filter/ShareDir",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::Manifest",
"name" : "@RJBS/@Filter/Manifest",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::TestRelease",
"name" : "@RJBS/@Filter/TestRelease",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::ConfirmRelease",
"name" : "@RJBS/@Filter/ConfirmRelease",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::UploadToCPAN",
"name" : "@RJBS/@Filter/UploadToCPAN",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::MakeMaker",
"config" : {
"Dist::Zilla::Role::TestRunner" : {
"default_jobs" : 9
}
},
"name" : "@RJBS/MakeMaker",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::AutoPrereqs",
"name" : "@RJBS/AutoPrereqs",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::Git::NextVersion",
"config" : {
"Dist::Zilla::Plugin::Git::NextVersion" : {
"first_version" : "0.001",
"version_by_branch" : 1,
"version_regexp" : "(?^:^([0-9]+\\.[0-9]+)$)"
},
"Dist::Zilla::Role::Git::Repo" : {
"git_version" : "2.44.0",
"repo_root" : "."
}
},
"name" : "@RJBS/Git::NextVersion",
"version" : "2.049"
},
{
"class" : "Dist::Zilla::Plugin::PkgVersion",
"name" : "@RJBS/PkgVersion",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::MetaConfig",
"name" : "@RJBS/MetaConfig",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::MetaJSON",
"name" : "@RJBS/MetaJSON",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::NextRelease",
"name" : "@RJBS/NextRelease",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::Test::ChangesHasContent",
"name" : "@RJBS/Test::ChangesHasContent",
"version" : "0.011"
},
{
"class" : "Dist::Zilla::Plugin::PodSyntaxTests",
"name" : "@RJBS/PodSyntaxTests",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::Test::ReportPrereqs",
"name" : "@RJBS/Test::ReportPrereqs",
"version" : "0.029"
},
{
"class" : "Dist::Zilla::Plugin::Git::Remote::Check",
"name" : "@RJBS/Git::Remote::Check",
"version" : "0.1.2"
},
{
"class" : "Dist::Zilla::Plugin::Prereqs",
"config" : {
"Dist::Zilla::Plugin::Prereqs" : {
"phase" : "test",
"type" : "requires"
}
},
"name" : "@RJBS/TestMoreWithSubtests",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::PodWeaver",
"config" : {
"Dist::Zilla::Plugin::PodWeaver" : {
"config_plugins" : [
"@RJBS"
],
"finder" : [
":InstallModules",
":PerlExecFiles"
],
"plugins" : [
{
"class" : "Pod::Weaver::Plugin::EnsurePod5",
"name" : "@CorePrep/EnsurePod5",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Plugin::H1Nester",
"name" : "@CorePrep/H1Nester",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Plugin::SingleEncoding",
"name" : "@RJBS/SingleEncoding",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Name",
"name" : "@RJBS/Name",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Version",
"name" : "@RJBS/Version",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Region",
"name" : "@RJBS/Prelude",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Generic",
"name" : "@RJBS/Synopsis",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Generic",
"name" : "@RJBS/Description",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Generic",
"name" : "@RJBS/Overview",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Generic",
"name" : "@RJBS/Stability",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::GenerateSection",
"name" : "@RJBS/PerlSupport",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Collect",
"name" : "Attributes",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Collect",
"name" : "Methods",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Collect",
"name" : "Functions",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Leftovers",
"name" : "@RJBS/Leftovers",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Region",
"name" : "@RJBS/postlude",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Authors",
"name" : "@RJBS/Authors",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Section::Contributors",
"name" : "@RJBS/Contributors",
"version" : "0.009"
},
{
"class" : "Pod::Weaver::Section::Legal",
"name" : "@RJBS/Legal",
"version" : "4.020"
},
{
"class" : "Pod::Weaver::Plugin::Transformer",
"name" : "@RJBS/List",
"version" : "4.020"
}
]
}
},
"name" : "@RJBS/PodWeaver",
"version" : "4.010"
},
{
"class" : "Dist::Zilla::Plugin::RJBSMisc",
"name" : "@RJBS/RJBSMisc",
"version" : "5.026"
},
{
"class" : "Dist::Zilla::Plugin::GithubMeta",
"name" : "@RJBS/GithubMeta",
"version" : "0.58"
},
{
"class" : "Dist::Zilla::Plugin::Git::Check",
"config" : {
"Dist::Zilla::Plugin::Git::Check" : {
"untracked_files" : "die"
},
"Dist::Zilla::Role::Git::DirtyFiles" : {
"allow_dirty" : [
"Changes",
"dist.ini"
],
"allow_dirty_match" : [],
"changelog" : "Changes"
},
"Dist::Zilla::Role::Git::Repo" : {
"git_version" : "2.44.0",
"repo_root" : "."
}
},
"name" : "@RJBS/@Git/Check",
"version" : "2.049"
},
{
"class" : "Dist::Zilla::Plugin::Git::Commit",
"config" : {
"Dist::Zilla::Plugin::Git::Commit" : {
"add_files_in" : [],
"commit_msg" : "v%V%n%n%c",
"signoff" : 0
},
"Dist::Zilla::Role::Git::DirtyFiles" : {
"allow_dirty" : [
"Changes",
"dist.ini"
],
"allow_dirty_match" : [],
"changelog" : "Changes"
},
"Dist::Zilla::Role::Git::Repo" : {
"git_version" : "2.44.0",
"repo_root" : "."
},
"Dist::Zilla::Role::Git::StringFormatter" : {
"time_zone" : "local"
}
},
"name" : "@RJBS/@Git/Commit",
"version" : "2.049"
},
{
"class" : "Dist::Zilla::Plugin::Git::Tag",
"config" : {
"Dist::Zilla::Plugin::Git::Tag" : {
"branch" : null,
"changelog" : "Changes",
"signed" : 0,
"tag" : "4.020",
"tag_format" : "%v",
"tag_message" : "v%V"
},
"Dist::Zilla::Role::Git::Repo" : {
"git_version" : "2.44.0",
"repo_root" : "."
},
"Dist::Zilla::Role::Git::StringFormatter" : {
"time_zone" : "local"
}
},
"name" : "@RJBS/@Git/Tag",
"version" : "2.049"
},
{
"class" : "Dist::Zilla::Plugin::Git::Push",
"config" : {
"Dist::Zilla::Plugin::Git::Push" : {
"push_to" : [
"github :"
],
"remotes_must_exist" : 0
},
"Dist::Zilla::Role::Git::Repo" : {
"git_version" : "2.44.0",
"repo_root" : "."
}
},
"name" : "@RJBS/@Git/Push",
"version" : "2.049"
},
{
"class" : "Dist::Zilla::Plugin::Git::Contributors",
"config" : {
"Dist::Zilla::Plugin::Git::Contributors" : {
"git_version" : "2.44.0",
"include_authors" : 0,
"include_releaser" : 1,
"order_by" : "name",
"paths" : []
}
},
"name" : "@RJBS/Git::Contributors",
"version" : "0.037"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":InstallModules",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":IncModules",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":TestFiles",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":ExtraTestFiles",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":ExecFiles",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":PerlExecFiles",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":ShareFiles",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":MainModule",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":AllFiles",
"version" : "6.031"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":NoFiles",
"version" : "6.031"
}
],
"zilla" : {
"class" : "Dist::Zilla::Dist::Builder",
"config" : {
"is_trial" : 0
},
"version" : "6.031"
}
},
"x_contributors" : [
"Alex Peters <lxp@cpan.org>",
"Apocalypse <perl@0ne.us>",
"Blabos de Blebe <blabos@cpan.org>",
"Caleb Cushing <xenoterracide@gmail.com>",
"Christian Walde <walde.christian@googlemail.com>",
"Christopher J. Madsen <perl@cjmweb.net>",
"Chris Weyl <cweyl@alumni.drew.edu>",
"Dave Houston <dave.houston@gmail.com>",
"Dave Rolsky <autarch@urth.org>",
"David E. Wheeler <david@justatheory.com>",
"David Golden <dagolden@cpan.org>",
"David Miguel Susano Pinto <carandraug+dev@gmail.com>",
"David Zurborg <post@david-zurb.org>",
"Doug Bell <doug@preaction.me>",
"Florian Ragwitz <rafl@debian.org>",
"Jonathan \"Duke\" Leto <jonathan@leto.net>",
"Joshua Keroes <joshua.keroes@integratelecom.com>",
"Karen Etheridge <ether@cpan.org>",
"Kent Fredric <kentfredric@gmail.com>",
"Kivanc Yazan <kyzn@cpan.org>",
"Marcel Gruenauer <hanekomu@gmail.com>",
"Randy Stauner <randy@magnificent-tears.com>",
"Ricardo Signes <rjbs@semiotic.systems>",
"Sam Graham <git@illusori.co.uk>",
"Shlomi Fish <shlomif@shlomifish.org>"
],
"x_generated_by_perl" : "v5.38.0",
"x_rjbs_perl_window" : "standard",
"x_serialization_backend" : "Cpanel::JSON::XS version 4.37",
"x_spdx_expression" : "Artistic-1.0-Perl OR GPL-1.0-or-later"
}
---
abstract: 'weave together a Pod document from an outline'
author:
- 'Ricardo SIGNES <cpan@semiotic.systems>'
build_requires:
ExtUtils::MakeMaker: '0'
File::Spec: '0'
PPI: '0'
Software::License::Artistic_1_0: '0'
Software::License::Perl_5: '0'
Test::Differences: '0'
Test::More: '0.96'
configure_requires:
ExtUtils::MakeMaker: '6.78'
dynamic_config: 0
generated_by: 'Dist::Zilla version 6.031, CPAN::Meta::Converter version 2.150010'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: '1.4'
name: Pod-Weaver
requires:
Config::MVP: '2'
Config::MVP::Assembler: '0'
Config::MVP::Assembler::WithBundles: '0'
Config::MVP::Reader::Finder: '0'
Config::MVP::Reader::INI: '0'
DateTime: '0'
File::Spec: '0'
List::MoreUtils: '0'
List::Util: '1.33'
Log::Dispatchouli: '1.100710'
Mixin::Linewise::Readers: '0.103'
Module::Runtime: '0'
Moose: '0'
Moose::Role: '0'
Moose::Util::TypeConstraints: '0'
Params::Util: '0'
Pod::Elemental: '0.100220'
Pod::Elemental::Document: '0'
Pod::Elemental::Element::Nested: '0'
Pod::Elemental::Element::Pod5::Command: '0'
Pod::Elemental::Element::Pod5::Ordinary: '0'
Pod::Elemental::Element::Pod5::Region: '0'
Pod::Elemental::Element::Pod5::Verbatim: '0'
Pod::Elemental::Selectors: '0'
Pod::Elemental::Transformer::Gatherer: '0'
Pod::Elemental::Transformer::Nester: '0'
Pod::Elemental::Transformer::Pod5: '0'
Pod::Elemental::Types: '0'
String::Flogger: '1'
String::Formatter: '0.100680'
String::RewritePrefix: '0'
Text::Template: '0'
Text::Wrap: '0'
experimental: '0'
feature: '0'
namespace::autoclean: '0'
perl: v5.20.0
strict: '0'
utf8: '0'
warnings: '0'
resources:
bugtracker: https://github.com/rjbs/Pod-Weaver/issues
homepage: https://github.com/rjbs/Pod-Weaver
repository: https://github.com/rjbs/Pod-Weaver.git
version: '4.020'
x_Dist_Zilla:
perl:
version: '5.038000'
plugins:
-
class: Dist::Zilla::Plugin::Prereqs
config:
Dist::Zilla::Plugin::Prereqs:
phase: runtime
type: requires
name: Prereqs
version: '6.031'
-
class: Dist::Zilla::Plugin::Git::GatherDir
config:
Dist::Zilla::Plugin::GatherDir:
exclude_filename: []
exclude_match: []
include_dotfiles: 0
prefix: ''
prune_directory: []
root: .
Dist::Zilla::Plugin::Git::GatherDir:
include_untracked: 0
name: '@RJBS/Git::GatherDir'
version: '2.049'
-
class: Dist::Zilla::Plugin::CheckPrereqsIndexed
name: '@RJBS/CheckPrereqsIndexed'
version: '0.022'
-
class: Dist::Zilla::Plugin::CheckExtraTests
name: '@RJBS/CheckExtraTests'
version: '0.029'
-
class: Dist::Zilla::Plugin::PromptIfStale
config:
Dist::Zilla::Plugin::PromptIfStale:
check_all_plugins: 0
check_all_prereqs: 0
modules:
- Dist::Zilla::PluginBundle::RJBS
phase: build
run_under_travis: 0
skip: []
name: '@RJBS/RJBS-Outdated'
version: '0.058'
-
class: Dist::Zilla::Plugin::PromptIfStale
config:
Dist::Zilla::Plugin::PromptIfStale:
check_all_plugins: 1
check_all_prereqs: 0
modules: []
phase: release
run_under_travis: 0
skip:
- Dist::Zilla::Plugin::RJBSMisc
name: '@RJBS/CPAN-Outdated'
version: '0.058'
-
class: Dist::Zilla::Plugin::PruneCruft
name: '@RJBS/@Filter/PruneCruft'
version: '6.031'
-
class: Dist::Zilla::Plugin::ManifestSkip
name: '@RJBS/@Filter/ManifestSkip'
version: '6.031'
-
class: Dist::Zilla::Plugin::MetaYAML
name: '@RJBS/@Filter/MetaYAML'
version: '6.031'
-
class: Dist::Zilla::Plugin::License
name: '@RJBS/@Filter/License'
version: '6.031'
-
class: Dist::Zilla::Plugin::Readme
name: '@RJBS/@Filter/Readme'
version: '6.031'
-
class: Dist::Zilla::Plugin::ExecDir
name: '@RJBS/@Filter/ExecDir'
version: '6.031'
-
class: Dist::Zilla::Plugin::ShareDir
name: '@RJBS/@Filter/ShareDir'
version: '6.031'
-
class: Dist::Zilla::Plugin::Manifest
name: '@RJBS/@Filter/Manifest'
version: '6.031'
-
class: Dist::Zilla::Plugin::TestRelease
name: '@RJBS/@Filter/TestRelease'
version: '6.031'
-
class: Dist::Zilla::Plugin::ConfirmRelease
name: '@RJBS/@Filter/ConfirmRelease'
version: '6.031'
-
class: Dist::Zilla::Plugin::UploadToCPAN
name: '@RJBS/@Filter/UploadToCPAN'
version: '6.031'
-
class: Dist::Zilla::Plugin::MakeMaker
config:
Dist::Zilla::Role::TestRunner:
default_jobs: 9
name: '@RJBS/MakeMaker'
version: '6.031'
-
class: Dist::Zilla::Plugin::AutoPrereqs
name: '@RJBS/AutoPrereqs'
version: '6.031'
-
class: Dist::Zilla::Plugin::Git::NextVersion
config:
Dist::Zilla::Plugin::Git::NextVersion:
first_version: '0.001'
version_by_branch: 1
version_regexp: (?^:^([0-9]+\.[0-9]+)$)
Dist::Zilla::Role::Git::Repo:
git_version: 2.44.0
repo_root: .
name: '@RJBS/Git::NextVersion'
version: '2.049'
-
class: Dist::Zilla::Plugin::PkgVersion
name: '@RJBS/PkgVersion'
version: '6.031'
-
class: Dist::Zilla::Plugin::MetaConfig
name: '@RJBS/MetaConfig'
version: '6.031'
-
class: Dist::Zilla::Plugin::MetaJSON
name: '@RJBS/MetaJSON'
version: '6.031'
-
class: Dist::Zilla::Plugin::NextRelease
name: '@RJBS/NextRelease'
version: '6.031'
-
class: Dist::Zilla::Plugin::Test::ChangesHasContent
name: '@RJBS/Test::ChangesHasContent'
version: '0.011'
-
class: Dist::Zilla::Plugin::PodSyntaxTests
name: '@RJBS/PodSyntaxTests'
version: '6.031'
-
class: Dist::Zilla::Plugin::Test::ReportPrereqs
name: '@RJBS/Test::ReportPrereqs'
version: '0.029'
-
class: Dist::Zilla::Plugin::Git::Remote::Check
name: '@RJBS/Git::Remote::Check'
version: 0.1.2
-
class: Dist::Zilla::Plugin::Prereqs
config:
Dist::Zilla::Plugin::Prereqs:
phase: test
type: requires
name: '@RJBS/TestMoreWithSubtests'
version: '6.031'
-
class: Dist::Zilla::Plugin::PodWeaver
config:
Dist::Zilla::Plugin::PodWeaver:
config_plugins:
- '@RJBS'
finder:
- ':InstallModules'
- ':PerlExecFiles'
plugins:
-
class: Pod::Weaver::Plugin::EnsurePod5
name: '@CorePrep/EnsurePod5'
version: '4.020'
-
class: Pod::Weaver::Plugin::H1Nester
name: '@CorePrep/H1Nester'
version: '4.020'
-
class: Pod::Weaver::Plugin::SingleEncoding
name: '@RJBS/SingleEncoding'
version: '4.020'
-
class: Pod::Weaver::Section::Name
name: '@RJBS/Name'
version: '4.020'
-
class: Pod::Weaver::Section::Version
name: '@RJBS/Version'
version: '4.020'
-
class: Pod::Weaver::Section::Region
name: '@RJBS/Prelude'
version: '4.020'
-
class: Pod::Weaver::Section::Generic
name: '@RJBS/Synopsis'
version: '4.020'
-
class: Pod::Weaver::Section::Generic
name: '@RJBS/Description'
version: '4.020'
-
class: Pod::Weaver::Section::Generic
name: '@RJBS/Overview'
version: '4.020'
-
class: Pod::Weaver::Section::Generic
name: '@RJBS/Stability'
version: '4.020'
-
class: Pod::Weaver::Section::GenerateSection
name: '@RJBS/PerlSupport'
version: '4.020'
-
class: Pod::Weaver::Section::Collect
name: Attributes
version: '4.020'
-
class: Pod::Weaver::Section::Collect
name: Methods
version: '4.020'
-
class: Pod::Weaver::Section::Collect
name: Functions
version: '4.020'
-
class: Pod::Weaver::Section::Leftovers
name: '@RJBS/Leftovers'
version: '4.020'
-
class: Pod::Weaver::Section::Region
name: '@RJBS/postlude'
version: '4.020'
-
class: Pod::Weaver::Section::Authors
name: '@RJBS/Authors'
version: '4.020'
-
class: Pod::Weaver::Section::Contributors
name: '@RJBS/Contributors'
version: '0.009'
-
class: Pod::Weaver::Section::Legal
name: '@RJBS/Legal'
version: '4.020'
-
class: Pod::Weaver::Plugin::Transformer
name: '@RJBS/List'
version: '4.020'
name: '@RJBS/PodWeaver'
version: '4.010'
-
class: Dist::Zilla::Plugin::RJBSMisc
name: '@RJBS/RJBSMisc'
version: '5.026'
-
class: Dist::Zilla::Plugin::GithubMeta
name: '@RJBS/GithubMeta'
version: '0.58'
-
class: Dist::Zilla::Plugin::Git::Check
config:
Dist::Zilla::Plugin::Git::Check:
untracked_files: die
Dist::Zilla::Role::Git::DirtyFiles:
allow_dirty:
- Changes
- dist.ini
allow_dirty_match: []
changelog: Changes
Dist::Zilla::Role::Git::Repo:
git_version: 2.44.0
repo_root: .
name: '@RJBS/@Git/Check'
version: '2.049'
-
class: Dist::Zilla::Plugin::Git::Commit
config:
Dist::Zilla::Plugin::Git::Commit:
add_files_in: []
commit_msg: v%V%n%n%c
signoff: 0
Dist::Zilla::Role::Git::DirtyFiles:
allow_dirty:
- Changes
- dist.ini
allow_dirty_match: []
changelog: Changes
Dist::Zilla::Role::Git::Repo:
git_version: 2.44.0
repo_root: .
Dist::Zilla::Role::Git::StringFormatter:
time_zone: local
name: '@RJBS/@Git/Commit'
version: '2.049'
-
class: Dist::Zilla::Plugin::Git::Tag
config:
Dist::Zilla::Plugin::Git::Tag:
branch: ~
changelog: Changes
signed: 0
tag: '4.020'
tag_format: '%v'
tag_message: v%V
Dist::Zilla::Role::Git::Repo:
git_version: 2.44.0
repo_root: .
Dist::Zilla::Role::Git::StringFormatter:
time_zone: local
name: '@RJBS/@Git/Tag'
version: '2.049'
-
class: Dist::Zilla::Plugin::Git::Push
config:
Dist::Zilla::Plugin::Git::Push:
push_to:
- 'github :'
remotes_must_exist: 0
Dist::Zilla::Role::Git::Repo:
git_version: 2.44.0
repo_root: .
name: '@RJBS/@Git/Push'
version: '2.049'
-
class: Dist::Zilla::Plugin::Git::Contributors
config:
Dist::Zilla::Plugin::Git::Contributors:
git_version: 2.44.0
include_authors: 0
include_releaser: 1
order_by: name
paths: []
name: '@RJBS/Git::Contributors'
version: '0.037'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':InstallModules'
version: '6.031'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':IncModules'
version: '6.031'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':TestFiles'
version: '6.031'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':ExtraTestFiles'
version: '6.031'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':ExecFiles'
version: '6.031'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':PerlExecFiles'
version: '6.031'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':ShareFiles'
version: '6.031'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':MainModule'
version: '6.031'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':AllFiles'
version: '6.031'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':NoFiles'
version: '6.031'
zilla:
class: Dist::Zilla::Dist::Builder
config:
is_trial: 0
version: '6.031'
x_contributors:
- 'Alex Peters <lxp@cpan.org>'
- 'Apocalypse <perl@0ne.us>'
- 'Blabos de Blebe <blabos@cpan.org>'
- 'Caleb Cushing <xenoterracide@gmail.com>'
- 'Christian Walde <walde.christian@googlemail.com>'
- 'Christopher J. Madsen <perl@cjmweb.net>'
- 'Chris Weyl <cweyl@alumni.drew.edu>'
- 'Dave Houston <dave.houston@gmail.com>'
- 'Dave Rolsky <autarch@urth.org>'
- 'David E. Wheeler <david@justatheory.com>'
- 'David Golden <dagolden@cpan.org>'
- 'David Miguel Susano Pinto <carandraug+dev@gmail.com>'
- 'David Zurborg <post@david-zurb.org>'
- 'Doug Bell <doug@preaction.me>'
- 'Florian Ragwitz <rafl@debian.org>'
- 'Jonathan "Duke" Leto <jonathan@leto.net>'
- 'Joshua Keroes <joshua.keroes@integratelecom.com>'
- 'Karen Etheridge <ether@cpan.org>'
- 'Kent Fredric <kentfredric@gmail.com>'
- 'Kivanc Yazan <kyzn@cpan.org>'
- 'Marcel Gruenauer <hanekomu@gmail.com>'
- 'Randy Stauner <randy@magnificent-tears.com>'
- 'Ricardo Signes <rjbs@semiotic.systems>'
- 'Sam Graham <git@illusori.co.uk>'
- 'Shlomi Fish <shlomif@shlomifish.org>'
x_generated_by_perl: v5.38.0
x_rjbs_perl_window: standard
x_serialization_backend: 'YAML::Tiny version 1.74'
x_spdx_expression: 'Artistic-1.0-Perl OR GPL-1.0-or-later'
Makefile.PL view on Meta::CPAN
# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.031.
use strict;
use warnings;
use 5.020000;
use ExtUtils::MakeMaker 6.78;
my %WriteMakefileArgs = (
"ABSTRACT" => "weave together a Pod document from an outline",
"AUTHOR" => "Ricardo SIGNES <cpan\@semiotic.systems>",
"CONFIGURE_REQUIRES" => {
"ExtUtils::MakeMaker" => "6.78"
},
"DISTNAME" => "Pod-Weaver",
"LICENSE" => "perl",
"MIN_PERL_VERSION" => "5.020000",
"NAME" => "Pod::Weaver",
"PREREQ_PM" => {
"Config::MVP" => 2,
"Config::MVP::Assembler" => 0,
"Config::MVP::Assembler::WithBundles" => 0,
"Config::MVP::Reader::Finder" => 0,
"Config::MVP::Reader::INI" => 0,
"DateTime" => 0,
"File::Spec" => 0,
"List::MoreUtils" => 0,
"List::Util" => "1.33",
"Log::Dispatchouli" => "1.100710",
"Mixin::Linewise::Readers" => "0.103",
"Module::Runtime" => 0,
"Moose" => 0,
"Moose::Role" => 0,
"Moose::Util::TypeConstraints" => 0,
"Params::Util" => 0,
"Pod::Elemental" => "0.100220",
"Pod::Elemental::Document" => 0,
"Pod::Elemental::Element::Nested" => 0,
"Pod::Elemental::Element::Pod5::Command" => 0,
"Pod::Elemental::Element::Pod5::Ordinary" => 0,
"Pod::Elemental::Element::Pod5::Region" => 0,
"Pod::Elemental::Element::Pod5::Verbatim" => 0,
"Pod::Elemental::Selectors" => 0,
"Pod::Elemental::Transformer::Gatherer" => 0,
"Pod::Elemental::Transformer::Nester" => 0,
"Pod::Elemental::Transformer::Pod5" => 0,
"Pod::Elemental::Types" => 0,
"String::Flogger" => 1,
"String::Formatter" => "0.100680",
"String::RewritePrefix" => 0,
"Text::Template" => 0,
"Text::Wrap" => 0,
"experimental" => 0,
"feature" => 0,
"namespace::autoclean" => 0,
"strict" => 0,
"utf8" => 0,
"warnings" => 0
},
"TEST_REQUIRES" => {
"ExtUtils::MakeMaker" => 0,
"File::Spec" => 0,
"PPI" => 0,
"Software::License::Artistic_1_0" => 0,
"Software::License::Perl_5" => 0,
"Test::Differences" => 0,
"Test::More" => "0.96"
},
"VERSION" => "4.020",
"test" => {
"TESTS" => "t/*.t"
}
);
my %FallbackPrereqs = (
"Config::MVP" => 2,
"Config::MVP::Assembler" => 0,
"Config::MVP::Assembler::WithBundles" => 0,
"Config::MVP::Reader::Finder" => 0,
"Config::MVP::Reader::INI" => 0,
"DateTime" => 0,
"ExtUtils::MakeMaker" => 0,
"File::Spec" => 0,
"List::MoreUtils" => 0,
"List::Util" => "1.33",
"Log::Dispatchouli" => "1.100710",
"Mixin::Linewise::Readers" => "0.103",
"Module::Runtime" => 0,
"Moose" => 0,
"Moose::Role" => 0,
"Moose::Util::TypeConstraints" => 0,
"PPI" => 0,
"Params::Util" => 0,
"Pod::Elemental" => "0.100220",
"Pod::Elemental::Document" => 0,
"Pod::Elemental::Element::Nested" => 0,
"Pod::Elemental::Element::Pod5::Command" => 0,
"Pod::Elemental::Element::Pod5::Ordinary" => 0,
"Pod::Elemental::Element::Pod5::Region" => 0,
"Pod::Elemental::Element::Pod5::Verbatim" => 0,
"Pod::Elemental::Selectors" => 0,
"Pod::Elemental::Transformer::Gatherer" => 0,
"Pod::Elemental::Transformer::Nester" => 0,
"Pod::Elemental::Transformer::Pod5" => 0,
"Pod::Elemental::Types" => 0,
"Software::License::Artistic_1_0" => 0,
"Software::License::Perl_5" => 0,
"String::Flogger" => 1,
"String::Formatter" => "0.100680",
"String::RewritePrefix" => 0,
"Test::Differences" => 0,
"Test::More" => "0.96",
"Text::Template" => 0,
"Text::Wrap" => 0,
"experimental" => 0,
"feature" => 0,
"namespace::autoclean" => 0,
"strict" => 0,
"utf8" => 0,
"warnings" => 0
);
unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
delete $WriteMakefileArgs{TEST_REQUIRES};
delete $WriteMakefileArgs{BUILD_REQUIRES};
$WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
}
delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
unless eval { ExtUtils::MakeMaker->VERSION(6.52) };
WriteMakefile(%WriteMakefileArgs);
This archive contains the distribution Pod-Weaver,
version 4.020:
weave together a Pod document from an outline
This software is copyright (c) 2024 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.
This README file was generated by Dist::Zilla::Plugin::Readme v6.031.
name = Pod-Weaver
author = Ricardo SIGNES <cpan@semiotic.systems>
license = Perl_5
copyright_holder = Ricardo SIGNES
[Prereqs]
Config::MVP::Reader::INI = 0 ; to make testing simpler
Mixin::Linewise::Readers = 0.103 ; fixed string semantics
[@RJBS]
perl-window = standard
lib/Pod/Weaver.pm view on Meta::CPAN
package Pod::Weaver 4.020;
# ABSTRACT: weave together a Pod document from an outline
use Moose;
use namespace::autoclean;
# BEGIN BOILERPLATE
use v5.20.0;
use warnings;
use utf8;
no feature 'switch';
use experimental qw(postderef postderef_qq); # This experiment gets mainlined.
# END BOILERPLATE
#pod =head1 SYNOPSIS
#pod
#pod my $weaver = Pod::Weaver->new_with_default_config;
#pod
#pod my $document = $weaver->weave_document({
#pod pod_document => $pod_elemental_document,
#pod ppi_document => $ppi_document,
#pod
#pod license => $software_license,
#pod version => $version_string,
#pod authors => \@author_names,
#pod })
#pod
#pod =head1 DESCRIPTION
#pod
#pod Pod::Weaver is a system for building Pod documents from templates. It doesn't
#pod perform simple text substitution, but instead builds a
#pod Pod::Elemental::Document. Its plugins sketch out a series of sections
#pod that will be produced based on an existing Pod document or other provided
#pod information.
#pod
#pod =cut
use File::Spec;
use Log::Dispatchouli 1.100710; # proxy
use Pod::Elemental 0.100220;
use Pod::Elemental::Document;
use Pod::Weaver::Config::Finder;
use Pod::Weaver::Role::Plugin;
use String::Flogger 1;
#pod =attr logger
#pod
#pod This attribute stores the logger, which must provide a log method. The
#pod weaver's log method delegates to the logger's log method.
#pod
#pod =cut
has logger => (
is => 'ro',
lazy => 1,
default => sub {
Log::Dispatchouli->new({
ident => 'Pod::Weaver',
to_stdout => 1,
log_pid => 0,
});
},
handles => [ qw(log log_fatal log_debug) ]
);
#pod =attr plugins
#pod
#pod This attribute is an arrayref of objects that can perform the
#pod L<Pod::Weaver::Role::Plugin> role. In general, its contents are found through
#pod the C<L</plugins_with>> method.
#pod
#pod =cut
has plugins => (
is => 'ro',
isa => 'ArrayRef[Pod::Weaver::Role::Plugin]',
required => 1,
lazy => 1,
init_arg => undef,
default => sub { [] },
);
#pod =method plugins_with
#pod
#pod my $plugins_array_ref = $weaver->plugins_with('-Section');
#pod
#pod This method will return an arrayref of plugins that perform the given role, in
#pod the order of their registration. If the role name begins with a hyphen, the
#pod method will prepend C<Pod::Weaver::Role::>.
#pod
#pod =cut
sub plugins_with {
my ($self, $role) = @_;
$role =~ s/^-/Pod::Weaver::Role::/;
my @plugins = grep { $_->does($role) } $self->plugins->@*;
return \@plugins;
}
#pod =method weave_document
#pod
#pod my $document = $weaver->weave_document(\%input);
#pod
#pod This is the most important method in Pod::Weaver. Given a set of input
#pod parameters, it will weave a new document. Different section plugins will
#pod expect different input parameters to be present, but some common ones include:
#pod
#pod pod_document - a Pod::Elemental::Document for the original Pod document
#pod ppi_document - a PPI document for the source of the module being documented
#pod license - a Software::License object for the source module's license
#pod version - a version (string) to use in produced documentation
#pod
#pod The C<pod_document> should have gone through a L<Pod5
#pod transformer|Pod::Elemental::Transformer::Pod5>, and should probably have had
#pod its C<=head1> elements L<nested|Pod::Elemental::Transformer::Nester>.
#pod
#pod The method will return a new Pod::Elemental::Document. The input documents may
#pod be destructively altered during the weaving process. If they should be
#pod untouched, pass in copies.
#pod
#pod =cut
sub weave_document {
my ($self, $input) = @_;
my $document = Pod::Elemental::Document->new;
for ($self->plugins_with(-Preparer)->@*) {
$_->prepare_input($input);
}
for ($self->plugins_with(-Dialect)->@*) {
$_->translate_dialect($input->{pod_document});
}
for ($self->plugins_with(-Transformer)->@*) {
$_->transform_document($input->{pod_document});
}
for ($self->plugins_with(-Section)->@*) {
$_->weave_section($document, $input);
}
for ($self->plugins_with(-Finalizer)->@*) {
$_->finalize_document($document, $input);
}
return $document;
}
#pod =method new_with_default_config
#pod
#pod This method returns a new Pod::Weaver with a stock configuration by using only
#pod L<Pod::Weaver::PluginBundle::Default>.
#pod
#pod =cut
sub new_with_default_config {
my ($class, $arg) = @_;
my $assembler = Pod::Weaver::Config::Assembler->new;
my $root = $assembler->section_class->new({ name => '_' });
$assembler->sequence->add_section($root);
$assembler->change_section('@Default');
$assembler->end_section;
return $class->new_from_config_sequence($assembler->sequence, $arg);
}
sub new_from_config {
my ($class, $arg, $new_arg) = @_;
my $root = $arg->{root} || '.';
my $name = File::Spec->catfile($root, 'weaver');
my ($sequence) = Pod::Weaver::Config::Finder->new->read_config($name);
return $class->new_from_config_sequence($sequence, $new_arg);
}
sub new_from_config_sequence {
my ($class, $seq, $arg) = @_;
$arg ||= {};
my $merge = $arg->{root_config} || {};
confess("config must be a Config::MVP::Sequence")
unless $seq and $seq->isa('Config::MVP::Sequence');
my $core_config = $seq->section_named('_')->payload;
my $self = $class->new({
%$merge,
%$core_config,
});
for my $section ($seq->sections) {
next if $section->name eq '_';
my ($name, $plugin_class, $arg) = (
$section->name,
$section->package,
$section->payload,
);
$self->log_debug("initializing plugin $name ($plugin_class)");
confess "arguments attempted to override 'plugin_name'"
if defined $arg->{plugin_name};
confess "arguments attempted to override 'weaver'"
if defined $arg->{weaver};
push $self->plugins->@*,
$plugin_class->new({
%$arg,
plugin_name => $name,
weaver => $self,
});
}
return $self;
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver - weave together a Pod document from an outline
=head1 VERSION
version 4.020
=head1 SYNOPSIS
my $weaver = Pod::Weaver->new_with_default_config;
my $document = $weaver->weave_document({
pod_document => $pod_elemental_document,
ppi_document => $ppi_document,
license => $software_license,
version => $version_string,
authors => \@author_names,
})
=head1 DESCRIPTION
Pod::Weaver is a system for building Pod documents from templates. It doesn't
perform simple text substitution, but instead builds a
Pod::Elemental::Document. Its plugins sketch out a series of sections
that will be produced based on an existing Pod document or other provided
information.
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 ATTRIBUTES
=head2 logger
This attribute stores the logger, which must provide a log method. The
weaver's log method delegates to the logger's log method.
=head2 plugins
This attribute is an arrayref of objects that can perform the
L<Pod::Weaver::Role::Plugin> role. In general, its contents are found through
the C<L</plugins_with>> method.
=head1 METHODS
=head2 plugins_with
my $plugins_array_ref = $weaver->plugins_with('-Section');
This method will return an arrayref of plugins that perform the given role, in
the order of their registration. If the role name begins with a hyphen, the
method will prepend C<Pod::Weaver::Role::>.
=head2 weave_document
my $document = $weaver->weave_document(\%input);
This is the most important method in Pod::Weaver. Given a set of input
parameters, it will weave a new document. Different section plugins will
expect different input parameters to be present, but some common ones include:
pod_document - a Pod::Elemental::Document for the original Pod document
ppi_document - a PPI document for the source of the module being documented
license - a Software::License object for the source module's license
version - a version (string) to use in produced documentation
The C<pod_document> should have gone through a L<Pod5
transformer|Pod::Elemental::Transformer::Pod5>, and should probably have had
its C<=head1> elements L<nested|Pod::Elemental::Transformer::Nester>.
The method will return a new Pod::Elemental::Document. The input documents may
be destructively altered during the weaving process. If they should be
untouched, pass in copies.
=head2 new_with_default_config
This method returns a new Pod::Weaver with a stock configuration by using only
L<Pod::Weaver::PluginBundle::Default>.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 CONTRIBUTORS
=for stopwords Alex Peters Apocalypse Blabos de Blebe Caleb Cushing Christian Walde Christopher J. Madsen Chris Weyl Dave Houston Rolsky David E. Wheeler Golden Miguel Susano Pinto Zurborg Doug Bell Florian Ragwitz Jonathan "Duke" Leto Joshua Keroes ...
=over 4
=item *
Alex Peters <lxp@cpan.org>
=item *
Apocalypse <perl@0ne.us>
=item *
Blabos de Blebe <blabos@cpan.org>
=item *
Caleb Cushing <xenoterracide@gmail.com>
=item *
Christian Walde <walde.christian@googlemail.com>
=item *
Christopher J. Madsen <perl@cjmweb.net>
=item *
Chris Weyl <cweyl@alumni.drew.edu>
=item *
Dave Houston <dave.houston@gmail.com>
=item *
Dave Rolsky <autarch@urth.org>
=item *
David E. Wheeler <david@justatheory.com>
=item *
David Golden <dagolden@cpan.org>
=item *
David Miguel Susano Pinto <carandraug+dev@gmail.com>
=item *
David Zurborg <post@david-zurb.org>
=item *
Doug Bell <doug@preaction.me>
=item *
Florian Ragwitz <rafl@debian.org>
=item *
Jonathan "Duke" Leto <jonathan@leto.net>
=item *
Joshua Keroes <joshua.keroes@integratelecom.com>
=item *
Karen Etheridge <ether@cpan.org>
=item *
Kent Fredric <kentfredric@gmail.com>
=item *
Kivanc Yazan <kyzn@cpan.org>
=item *
Marcel Gruenauer <hanekomu@gmail.com>
=item *
Randy Stauner <randy@magnificent-tears.com>
=item *
Ricardo Signes <rjbs@semiotic.systems>
=item *
Sam Graham <git@illusori.co.uk>
=item *
Shlomi Fish <shlomif@shlomifish.org>
=back
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Config.pm view on Meta::CPAN
package Pod::Weaver::Config 4.020;
# ABSTRACT: stored configuration loader role
use Moose::Role;
use Config::MVP 2;
use Pod::Weaver::Config::Assembler;
use namespace::autoclean;
#pod =head1 DESCRIPTION
#pod
#pod The config role provides some helpers for writing a configuration loader using
#pod the L<Config::MVP|Config::MVP> system to load and validate its configuration.
#pod
#pod =attr assembler
#pod
#pod The L<assembler> attribute must be a Config::MVP::Assembler, has a sensible
#pod default that will handle the standard needs of a config loader. Namely, it
#pod will be pre-loaded with a starting section for root configuration.
#pod
#pod =cut
sub build_assembler {
my $assembler = Pod::Weaver::Config::Assembler->new;
my $root = $assembler->section_class->new({
name => '_',
});
$assembler->sequence->add_section($root);
return $assembler;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Config - stored configuration loader role
=head1 VERSION
version 4.020
=head1 DESCRIPTION
The config role provides some helpers for writing a configuration loader using
the L<Config::MVP|Config::MVP> system to load and validate its configuration.
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 ATTRIBUTES
=head2 assembler
The L<assembler> attribute must be a Config::MVP::Assembler, has a sensible
default that will handle the standard needs of a config loader. Namely, it
will be pre-loaded with a starting section for root configuration.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Config/Assembler.pm view on Meta::CPAN
package Pod::Weaver::Config::Assembler 4.020;
# ABSTRACT: Pod::Weaver-specific subclass of Config::MVP::Assembler
use Moose;
extends 'Config::MVP::Assembler';
with 'Config::MVP::Assembler::WithBundles';
use String::RewritePrefix;
use namespace::autoclean;
sub expand_package {
my $str = $_[1];
return scalar String::RewritePrefix->rewrite(
{
'' => 'Pod::Weaver::Section::',
'-' => 'Pod::Weaver::Plugin::',
'@' => 'Pod::Weaver::PluginBundle::',
'=' => '',
},
$str,
);
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Config::Assembler - Pod::Weaver-specific subclass of Config::MVP::Assembler
=head1 VERSION
version 4.020
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Config/Finder.pm view on Meta::CPAN
package Pod::Weaver::Config::Finder 4.020;
# ABSTRACT: the reader for weaver.ini files
use Moose;
extends 'Config::MVP::Reader::Finder';
with 'Pod::Weaver::Config';
use namespace::autoclean;
sub default_search_path {
return qw(Pod::Weaver::Config Config::MVP::Reader);
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Config::Finder - the reader for weaver.ini files
=head1 VERSION
version 4.020
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Plugin/EnsurePod5.pm view on Meta::CPAN
package Pod::Weaver::Plugin::EnsurePod5 4.020;
# ABSTRACT: ensure that the Pod5 translator has been run on this document
use Moose;
with 'Pod::Weaver::Role::Preparer';
# BEGIN BOILERPLATE
use v5.20.0;
use warnings;
use utf8;
no feature 'switch';
use experimental qw(postderef postderef_qq); # This experiment gets mainlined.
# END BOILERPLATE
use namespace::autoclean;
use Pod::Elemental::Transformer::Pod5;
#pod =head1 OVERVIEW
#pod
#pod This plugin is very, very simple: it runs the Pod5 transformer on the input
#pod document and removes any leftover whitespace-only Nonpod elements. If
#pod non-whitespace-only Nonpod elements are found, an exception is raised.
#pod
#pod =cut
sub _strip_nonpod {
my ($self, $node) = @_;
# XXX: This is really stupid. -- rjbs, 2009-10-24
foreach my $i (reverse 0 .. $node->children->$#*) {
my $para = $node->children->[$i];
if ($para->isa('Pod::Elemental::Element::Pod5::Nonpod')) {
if ($para->content !~ /\S/) {
splice $node->children->@*, $i, 1
} else {
confess "can't cope with a Nonpod element with non-whitespace content";
}
} elsif ($para->does('Pod::Elemental::Node')) {
$self->_strip_nonpod($para);
}
}
}
sub prepare_input {
my ($self, $input) = @_;
my $pod_document = $input->{pod_document};
Pod::Elemental::Transformer::Pod5->new->transform_node($pod_document);
$self->_strip_nonpod($pod_document);
return;
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Plugin::EnsurePod5 - ensure that the Pod5 translator has been run on this document
=head1 VERSION
version 4.020
=head1 OVERVIEW
This plugin is very, very simple: it runs the Pod5 transformer on the input
document and removes any leftover whitespace-only Nonpod elements. If
non-whitespace-only Nonpod elements are found, an exception is raised.
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Plugin/H1Nester.pm view on Meta::CPAN
package Pod::Weaver::Plugin::H1Nester 4.020;
# ABSTRACT: structure the input pod document into head1-grouped sections
use Moose;
with 'Pod::Weaver::Role::Transformer';
# BEGIN BOILERPLATE
use v5.20.0;
use warnings;
use utf8;
no feature 'switch';
use experimental qw(postderef postderef_qq); # This experiment gets mainlined.
# END BOILERPLATE
use namespace::autoclean;
use Pod::Elemental::Selectors -all;
use Pod::Elemental::Transformer::Nester;
#pod =head1 OVERVIEW
#pod
#pod This plugin is very, very simple: it uses the
#pod L<Pod::Elemental::Transformer::Nester> to restructure the document under its
#pod C<=head1> elements.
#pod
#pod =cut
sub transform_document {
my ($self, $document) = @_;
my $nester = Pod::Elemental::Transformer::Nester->new({
top_selector => s_command([ qw(head1) ]),
content_selectors => [
s_flat,
s_command( [ qw(head2 head3 head4 over item back) ]),
],
});
$nester->transform_node($document);
return;
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Plugin::H1Nester - structure the input pod document into head1-grouped sections
=head1 VERSION
version 4.020
=head1 OVERVIEW
This plugin is very, very simple: it uses the
L<Pod::Elemental::Transformer::Nester> to restructure the document under its
C<=head1> elements.
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Plugin/SingleEncoding.pm view on Meta::CPAN
package Pod::Weaver::Plugin::SingleEncoding 4.020;
# ABSTRACT: ensure that there is exactly one =encoding of known value
use Moose;
with(
'Pod::Weaver::Role::Dialect',
'Pod::Weaver::Role::Finalizer',
);
# BEGIN BOILERPLATE
use v5.20.0;
use warnings;
use utf8;
no feature 'switch';
use experimental qw(postderef postderef_qq); # This experiment gets mainlined.
# END BOILERPLATE
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.020
=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 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Plugin/Transformer.pm view on Meta::CPAN
package Pod::Weaver::Plugin::Transformer 4.020;
# ABSTRACT: apply arbitrary transformers
use Moose;
with 'Pod::Weaver::Role::Dialect';
# BEGIN BOILERPLATE
use v5.20.0;
use warnings;
use utf8;
no feature 'switch';
use experimental qw(postderef postderef_qq); # This experiment gets mainlined.
# END BOILERPLATE
use namespace::autoclean;
use Module::Runtime qw(use_module);
use List::MoreUtils qw(part);
use String::RewritePrefix;
#pod =head1 OVERVIEW
#pod
#pod This plugin acts as a L<Pod::Weaver::Role::Dialect> that applies an arbitrary
#pod L<Pod::Elemental::Transformer> to your input document. It is configured like
#pod this:
#pod
#pod [-Transformer / Lists]
#pod transformer = List
#pod format_name = outline
#pod
#pod This will end up creating a transformer like this:
#pod
#pod my $xform = Pod::Elemental::Transformer::List->new({
#pod format_name => 'outline',
#pod });
#pod
#pod and that transformer will then be handed the entire input Pod document.
#pod
#pod =cut
has transformer => (is => 'ro', required => 1);
sub BUILDARGS {
my ($class, @arg) = @_;
my %copy = ref $arg[0] ? $arg[0]->%* : @arg;
my @part = part { /\A\./ ? 0 : 1 } keys %copy;
my %class_args = map { s/\A\.//; $_ => $copy{ ".$_" } } $part[0]->@*;
my %xform_args = map { $_ => $copy{ $_ } } $part[1]->@*;
my $xform_class = String::RewritePrefix->rewrite(
{ '' => 'Pod::Elemental::Transformer::', '=' => '' },
delete $xform_args{transformer},
);
use_module($xform_class);
my $plugin_name = delete $xform_args{plugin_name};
my $weaver = delete $xform_args{weaver};
my $xform = $xform_class->new(\%xform_args);
return {
%class_args,
plugin_name => $plugin_name,
weaver => $weaver,
transformer => $xform,
}
}
sub translate_dialect {
my ($self, $pod_document) = @_;
$self->log_debug('applying transform');
$self->transformer->transform_node( $pod_document );
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Plugin::Transformer - apply arbitrary transformers
=head1 VERSION
version 4.020
=head1 OVERVIEW
This plugin acts as a L<Pod::Weaver::Role::Dialect> that applies an arbitrary
L<Pod::Elemental::Transformer> to your input document. It is configured like
this:
[-Transformer / Lists]
transformer = List
format_name = outline
This will end up creating a transformer like this:
my $xform = Pod::Elemental::Transformer::List->new({
format_name => 'outline',
});
and that transformer will then be handed the entire input Pod document.
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/PluginBundle/CorePrep.pm view on Meta::CPAN
use strict;
use warnings;
package Pod::Weaver::PluginBundle::CorePrep 4.020;
# ABSTRACT: a bundle for the most commonly-needed prep work for a pod document
# BEGIN BOILERPLATE
use v5.20.0;
use warnings;
use utf8;
no feature 'switch';
use experimental qw(postderef postderef_qq); # This experiment gets mainlined.
# END BOILERPLATE
use Pod::Weaver::Plugin::H1Nester;
sub mvp_bundle_config {
return (
[ '@CorePrep/EnsurePod5', 'Pod::Weaver::Plugin::EnsurePod5', {} ],
# dialects should run here
[ '@CorePrep/H1Nester', 'Pod::Weaver::Plugin::H1Nester', {} ],
);
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::PluginBundle::CorePrep - a bundle for the most commonly-needed prep work for a pod document
=head1 VERSION
version 4.020
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/PluginBundle/Default.pm view on Meta::CPAN
use strict;
use warnings;
package Pod::Weaver::PluginBundle::Default 4.020;
# ABSTRACT: a bundle for the most commonly-needed prep work for a pod document
# BEGIN BOILERPLATE
use v5.20.0;
use warnings;
use utf8;
no feature 'switch';
use experimental qw(postderef postderef_qq); # This experiment gets mainlined.
# END BOILERPLATE
#pod =head1 OVERVIEW
#pod
#pod This is the bundle used by default (specifically by Pod::Weaver's
#pod C<new_with_default_config> method). It may change over time, but should remain
#pod fairly conservative and straightforward.
#pod
#pod It is nearly equivalent to the following:
#pod
#pod [@CorePrep]
#pod
#pod [-SingleEncoding]
#pod
#pod [Name]
#pod [Version]
#pod
#pod [Region / prelude]
#pod
#pod [Generic / SYNOPSIS]
#pod [Generic / DESCRIPTION]
#pod [Generic / OVERVIEW]
#pod
#pod [Collect / ATTRIBUTES]
#pod command = attr
#pod
#pod [Collect / METHODS]
#pod command = method
#pod
#pod [Collect / FUNCTIONS]
#pod command = func
#pod
#pod [Leftovers]
#pod
#pod [Region / postlude]
#pod
#pod [Authors]
#pod [Legal]
#pod
#pod =cut
use namespace::autoclean;
use Pod::Weaver::Config::Assembler;
sub _exp { Pod::Weaver::Config::Assembler->expand_package($_[0]) }
sub mvp_bundle_config {
return (
[ '@Default/CorePrep', _exp('@CorePrep'), {} ],
[ '@Default/SingleEncoding', _exp('-SingleEncoding'), {} ],
[ '@Default/Name', _exp('Name'), {} ],
[ '@Default/Version', _exp('Version'), {} ],
[ '@Default/prelude', _exp('Region'), { region_name => 'prelude' } ],
[ 'SYNOPSIS', _exp('Generic'), {} ],
[ 'DESCRIPTION', _exp('Generic'), {} ],
[ 'OVERVIEW', _exp('Generic'), {} ],
[ 'ATTRIBUTES', _exp('Collect'), { command => 'attr' } ],
[ 'METHODS', _exp('Collect'), { command => 'method' } ],
[ 'FUNCTIONS', _exp('Collect'), { command => 'func' } ],
[ '@Default/Leftovers', _exp('Leftovers'), {} ],
[ '@Default/postlude', _exp('Region'), { region_name => 'postlude' } ],
[ '@Default/Authors', _exp('Authors'), {} ],
[ '@Default/Legal', _exp('Legal'), {} ],
)
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::PluginBundle::Default - a bundle for the most commonly-needed prep work for a pod document
=head1 VERSION
version 4.020
=head1 OVERVIEW
This is the bundle used by default (specifically by Pod::Weaver's
C<new_with_default_config> method). It may change over time, but should remain
fairly conservative and straightforward.
It is nearly equivalent to the following:
[@CorePrep]
[-SingleEncoding]
[Name]
[Version]
[Region / prelude]
[Generic / SYNOPSIS]
[Generic / DESCRIPTION]
[Generic / OVERVIEW]
[Collect / ATTRIBUTES]
command = attr
[Collect / METHODS]
command = method
[Collect / FUNCTIONS]
command = func
[Leftovers]
[Region / postlude]
[Authors]
[Legal]
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Role/Dialect.pm view on Meta::CPAN
package Pod::Weaver::Role::Dialect 4.020;
# ABSTRACT: something that translates Pod subdialects to standard Pod5
use Moose::Role;
with 'Pod::Weaver::Role::Plugin';
use namespace::autoclean;
#pod =head1 IMPLEMENTING
#pod
#pod The Dialect role indicates that a plugin will be used to pre-process the input
#pod Pod document before weaving begins. The plugin must provide a
#pod C<translate_dialect> method which will be called with the input hashref's
#pod C<pod_document> entry. It is expected to modify the document in place.
#pod
#pod =cut
requires 'translate_dialect';
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Role::Dialect - something that translates Pod subdialects to standard Pod5
=head1 VERSION
version 4.020
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 IMPLEMENTING
The Dialect role indicates that a plugin will be used to pre-process the input
Pod document before weaving begins. The plugin must provide a
C<translate_dialect> method which will be called with the input hashref's
C<pod_document> entry. It is expected to modify the document in place.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Role/Finalizer.pm view on Meta::CPAN
package Pod::Weaver::Role::Finalizer 4.020;
# ABSTRACT: something that goes back and finishes up after main weaving is over
use Moose::Role;
with 'Pod::Weaver::Role::Plugin';
use namespace::autoclean;
#pod =head1 IMPLEMENTING
#pod
#pod The Finalizer role indicates that a plugin will be used to post-process the
#pod output document hashref after section weaving is completed. The plugin must
#pod provide a C<finalize_document> method which will be called as follows:
#pod
#pod $finalizer_plugin->finalize_document($document, \%input);
#pod
#pod =cut
requires 'finalize_document';
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Role::Finalizer - something that goes back and finishes up after main weaving is over
=head1 VERSION
version 4.020
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 IMPLEMENTING
The Finalizer role indicates that a plugin will be used to post-process the
output document hashref after section weaving is completed. The plugin must
provide a C<finalize_document> method which will be called as follows:
$finalizer_plugin->finalize_document($document, \%input);
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Role/Plugin.pm view on Meta::CPAN
package Pod::Weaver::Role::Plugin 4.020;
# ABSTRACT: a Pod::Weaver plugin
use Moose::Role;
# BEGIN BOILERPLATE
use v5.20.0;
use warnings;
use utf8;
no feature 'switch';
use experimental qw(postderef postderef_qq); # This experiment gets mainlined.
# END BOILERPLATE
use Params::Util qw(_HASHLIKE);
use namespace::autoclean;
#pod =head1 IMPLEMENTING
#pod
#pod This is the most basic role that all plugins must perform.
#pod
#pod =attr plugin_name
#pod
#pod This name must be unique among all other plugins loaded into a weaver. In
#pod general, this will be set up by the configuration reader.
#pod
#pod =cut
has plugin_name => (
is => 'ro',
isa => 'Str',
required => 1,
);
#pod =attr weaver
#pod
#pod This is the Pod::Weaver object into which the plugin was loaded. In general,
#pod this will be set up when the weaver is instantiated from config.
#pod
#pod =cut
has weaver => (
is => 'ro',
isa => 'Pod::Weaver',
required => 1,
weak_ref => 1,
);
has logger => (
is => 'ro',
lazy => 1,
handles => [ qw(log log_debug log_fatal) ],
default => sub {
$_[0]->weaver->logger->proxy({
proxy_prefix => '[' . $_[0]->plugin_name . '] ',
});
},
);
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Role::Plugin - a Pod::Weaver plugin
=head1 VERSION
version 4.020
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 ATTRIBUTES
=head2 plugin_name
This name must be unique among all other plugins loaded into a weaver. In
general, this will be set up by the configuration reader.
=head2 weaver
This is the Pod::Weaver object into which the plugin was loaded. In general,
this will be set up when the weaver is instantiated from config.
=head1 IMPLEMENTING
This is the most basic role that all plugins must perform.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Role/Preparer.pm view on Meta::CPAN
package Pod::Weaver::Role::Preparer 4.020;
# ABSTRACT: something that mucks about with the input before weaving begins
use Moose::Role;
with 'Pod::Weaver::Role::Plugin';
use namespace::autoclean;
#pod =head1 IMPLEMENTING
#pod
#pod The Preparer role indicates that a plugin will be used to pre-process the input
#pod hashref before weaving begins. The plugin must provide a C<prepare_input>
#pod method which will be called with the input hashref. It is expected to modify
#pod the input in place.
#pod
#pod =cut
requires 'prepare_input';
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Role::Preparer - something that mucks about with the input before weaving begins
=head1 VERSION
version 4.020
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 IMPLEMENTING
The Preparer role indicates that a plugin will be used to pre-process the input
hashref before weaving begins. The plugin must provide a C<prepare_input>
method which will be called with the input hashref. It is expected to modify
the input in place.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Role/Section.pm view on Meta::CPAN
package Pod::Weaver::Role::Section 4.020;
# ABSTRACT: a plugin that will get a section into a woven document
use Moose::Role;
with 'Pod::Weaver::Role::Plugin';
use namespace::autoclean;
#pod =head1 IMPLEMENTING
#pod
#pod This role is used by plugins that will append sections to the output document.
#pod They must provide a method, C<weave_section> which will be invoked like this:
#pod
#pod $section_plugin->weave_section($output_document, \%input);
#pod
#pod They are expected to append their output to the output document, but they are
#pod free to behave differently if it's needed to do something really cool.
#pod
#pod =cut
requires 'weave_section';
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Role::Section - a plugin that will get a section into a woven document
=head1 VERSION
version 4.020
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 IMPLEMENTING
This role is used by plugins that will append sections to the output document.
They must provide a method, C<weave_section> which will be invoked like this:
$section_plugin->weave_section($output_document, \%input);
They are expected to append their output to the output document, but they are
free to behave differently if it's needed to do something really cool.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Role/StringFromComment.pm view on Meta::CPAN
package Pod::Weaver::Role::StringFromComment 4.020;
# ABSTRACT: Extract a string from a specially formatted comment
use Moose::Role;
# BEGIN BOILERPLATE
use v5.20.0;
use warnings;
use utf8;
no feature 'switch';
use experimental qw(postderef postderef_qq); # This experiment gets mainlined.
# END BOILERPLATE
use namespace::autoclean;
#pod =head1 OVERVIEW
#pod
#pod This role assists L<Pod::Weaver sections|Pod::Weaver::Role::Section> by
#pod allowing them to pull strings from the source comments formatted like:
#pod
#pod # KEYNAME: Some string...
#pod
#pod This is probably the most familiar to people using lines like the following to
#pod allow the L<Name section|Pod::Weaver::Section::Name> to determine a module's
#pod abstract:
#pod
#pod # ABSTRACT: Provides the HypnoToad with mind-control powers
#pod
#pod It will extract these strings by inspecting the C<ppi_document> which
#pod must be given.
#pod
#pod =head1 PRIVATE METHODS
#pod
#pod This role supplies only methods meant to be used internally by its consumer.
#pod
#pod =head2 _extract_comment_content($ppi_doc, $key)
#pod
#pod Given a key, try to find a comment matching C<# $key:> in the C<$ppi_document>
#pod and return everything but the prefix.
#pod
#pod e.g., given a document with a comment in it of the form:
#pod
#pod # ABSTRACT: Yada yada...
#pod
#pod ...and this is called...
#pod
#pod $self->_extract_comment_content($ppi, 'ABSTRACT')
#pod
#pod ...it returns to us:
#pod
#pod Yada yada...
#pod
#pod =cut
sub _extract_comment_content {
my ($self, $ppi_document, $key) = @_;
my $regex = qr/^\s*#+\s*$key:\s*(.+)$/m;
my $content;
my $finder = sub {
my $node = $_[1];
return 0 unless $node->isa('PPI::Token::Comment');
if ( $node->content =~ $regex ) {
$content = $1;
return 1;
}
return 0;
};
$ppi_document->find_first($finder);
return $content;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Role::StringFromComment - Extract a string from a specially formatted comment
=head1 VERSION
version 4.020
=head1 OVERVIEW
This role assists L<Pod::Weaver sections|Pod::Weaver::Role::Section> by
allowing them to pull strings from the source comments formatted like:
# KEYNAME: Some string...
This is probably the most familiar to people using lines like the following to
allow the L<Name section|Pod::Weaver::Section::Name> to determine a module's
abstract:
# ABSTRACT: Provides the HypnoToad with mind-control powers
It will extract these strings by inspecting the C<ppi_document> which
must be given.
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 PRIVATE METHODS
This role supplies only methods meant to be used internally by its consumer.
=head2 _extract_comment_content($ppi_doc, $key)
Given a key, try to find a comment matching C<# $key:> in the C<$ppi_document>
and return everything but the prefix.
e.g., given a document with a comment in it of the form:
# ABSTRACT: Yada yada...
...and this is called...
$self->_extract_comment_content($ppi, 'ABSTRACT')
...it returns to us:
Yada yada...
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Role/Transformer.pm view on Meta::CPAN
package Pod::Weaver::Role::Transformer 4.020;
# ABSTRACT: something that restructures a Pod5 document
use Moose::Role;
with 'Pod::Weaver::Role::Plugin';
use namespace::autoclean;
#pod =head1 IMPLEMENTING
#pod
#pod The Transformer role indicates that a plugin will be used to pre-process the input
#pod hashref's Pod document before weaving begins. The plugin must provide a
#pod C<transform_document> method which will be called with the input Pod document.
#pod It is expected to modify the input in place.
#pod
#pod =cut
requires 'transform_document';
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Role::Transformer - something that restructures a Pod5 document
=head1 VERSION
version 4.020
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 IMPLEMENTING
The Transformer role indicates that a plugin will be used to pre-process the input
hashref's Pod document before weaving begins. The plugin must provide a
C<transform_document> method which will be called with the input Pod document.
It is expected to modify the input in place.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Section/Authors.pm view on Meta::CPAN
package Pod::Weaver::Section::Authors 4.020;
# ABSTRACT: a section listing authors
use Moose;
with 'Pod::Weaver::Role::Section';
# BEGIN BOILERPLATE
use v5.20.0;
use warnings;
use utf8;
no feature 'switch';
use experimental qw(postderef postderef_qq); # This experiment gets mainlined.
# END BOILERPLATE
use Pod::Elemental::Element::Nested;
use Pod::Elemental::Element::Pod5::Verbatim;
#pod =head1 OVERVIEW
#pod
#pod This section adds a listing of the documents authors. It expects a C<authors>
#pod input parameter to be an arrayref of strings. If no C<authors> parameter is
#pod given, it will do nothing. Otherwise, it produces a hunk like this:
#pod
#pod =head1 AUTHORS
#pod
#pod Author One <a1@example.com>
#pod Author Two <a2@example.com>
#pod
#pod =attr header
#pod
#pod The title of the header to be added.
#pod (default: "AUTHOR" or "AUTHORS")
#pod
#pod =cut
has header => (
is => 'ro',
isa => 'Maybe[Str]',
);
sub weave_section {
my ($self, $document, $input) = @_;
return unless $input->{authors};
my $multiple_authors = $input->{authors}->@* > 1;
# I think I might like to have header be a callback or something, so that you
# can get pluralization for your own custom header. -- rjbs, 2015-03-17
my $name = $self->header || ($multiple_authors ? 'AUTHORS' : 'AUTHOR');
$self->log_debug("adding $name section");
$self->log_debug("author = $_") for $input->{authors}->@*;
my $authors = [ map {
Pod::Elemental::Element::Pod5::Ordinary->new({
content => $_,
}),
} $input->{authors}->@* ];
$authors = [
Pod::Elemental::Element::Pod5::Command->new({
command => 'over', content => '4',
}),
( map {
Pod::Elemental::Element::Pod5::Command->new({
command => 'item', content => '*',
}),
$_,
} @$authors ),
Pod::Elemental::Element::Pod5::Command->new({
command => 'back', content => '',
}),
] if $multiple_authors;
push $document->children->@*,
Pod::Elemental::Element::Nested->new({
type => 'command',
command => 'head1',
content => $name,
children => $authors,
});
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Section::Authors - a section listing authors
=head1 VERSION
version 4.020
=head1 OVERVIEW
This section adds a listing of the documents authors. It expects a C<authors>
input parameter to be an arrayref of strings. If no C<authors> parameter is
given, it will do nothing. Otherwise, it produces a hunk like this:
=head1 AUTHORS
Author One <a1@example.com>
Author Two <a2@example.com>
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 ATTRIBUTES
=head2 header
The title of the header to be added.
(default: "AUTHOR" or "AUTHORS")
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Section/Bugs.pm view on Meta::CPAN
package Pod::Weaver::Section::Bugs 4.020;
# ABSTRACT: a section for bugtracker info
use Moose;
use Text::Wrap ();
with 'Pod::Weaver::Role::Section';
# BEGIN BOILERPLATE
use v5.20.0;
use warnings;
use utf8;
no feature 'switch';
use experimental qw(postderef postderef_qq); # This experiment gets mainlined.
# END BOILERPLATE
#pod =head1 OVERVIEW
#pod
#pod This section plugin will produce a hunk of Pod giving bug reporting
#pod information for the document, like this:
#pod
#pod =head1 BUGS
#pod
#pod Please report any bugs or feature requests on the bugtracker website
#pod http://rt.cpan.org/Dist/Display.html?Queue=Pod-Weaver
#pod
#pod When submitting a bug or request, please include a test-file or a
#pod patch to an existing test-file that illustrates the bug or desired
#pod feature.
#pod
#pod This plugin requires a C<distmeta> parameter containing a hash reference of
#pod L<CPAN::Meta::Spec> distribution metadata and at least one of one of the
#pod parameters C<web> or C<mailto> defined in
#pod C<< $meta->{resources}{bugtracker} >>.
#pod
#pod =head2 Using Pod::Weaver::Section::Bugs with Dist::Zilla
#pod
#pod When the PodWeaver plugin is used, the C<distmeta> parameter comes from the
#pod dist's distmeta data. Since this section is skipped when no bugtracker data is
#pod in the distmeta, you'll need to make sure it's there. A number of plugins set
#pod this data up automatically. To manually configure your bugtracker data, you
#pod can add something like the following to C<dist.ini>:
#pod
#pod [MetaResources]
#pod bugtracker.web = http://rt.cpan.org/NoAuth/Bugs.html?Dist=Pod-Weaver-Example
#pod bugtracker.mailto = bug-pod-weaver-example@rt.cpan.org
#pod
#pod ; Perhaps add repository stuff here:
#pod repository.url =
#pod repository.web =
#pod repository.type =
#pod
#pod [PodWeaver]
#pod
#pod =attr header
#pod
#pod The title of the header to be added.
#pod (default: "BUGS")
#pod
#pod =cut
has header => (
is => 'ro',
isa => 'Str',
default => 'BUGS',
);
sub weave_section {
my ($self, $document, $input) = @_;
unless (exists $input->{distmeta}{resources}{bugtracker}) {
$self->log_debug('skipping section because there is no resources.bugtracker');
return;
}
my $bugtracker = $input->{distmeta}{resources}{bugtracker};
my ($web, $mailto) = $bugtracker->@{ qw(web mailto) };
unless (defined $web || defined $mailto) {
$self->log_debug('skipping section because there is no web or mailto key under resources.bugtracker');
return;
}
my $text = "Please report any bugs or feature requests ";
my $name = $self->header;
if (defined $web) {
$self->log_debug("including $web as bugtracker in $name section");
$text .= "on the bugtracker website L<$web>";
$text .= defined $mailto ? " or " : "\n";
}
if (defined $mailto) {
$self->log_debug("including $mailto as bugtracker in $name section");
$text .= "by email to L<$mailto|mailto:$mailto>\.\n";
}
local $Text::Wrap::huge = 'overflow';
$text = Text::Wrap::wrap(q{}, q{}, $text);
$text .= <<'HERE';
When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.
HERE
push $document->children->@*,
Pod::Elemental::Element::Nested->new({
command => 'head1',
content => $name,
children => [
Pod::Elemental::Element::Pod5::Ordinary->new({ content => $text }),
],
});
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Section::Bugs - a section for bugtracker info
=head1 VERSION
version 4.020
=head1 OVERVIEW
This section plugin will produce a hunk of Pod giving bug reporting
information for the document, like this:
=head1 BUGS
Please report any bugs or feature requests on the bugtracker website
http://rt.cpan.org/Dist/Display.html?Queue=Pod-Weaver
When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.
This plugin requires a C<distmeta> parameter containing a hash reference of
L<CPAN::Meta::Spec> distribution metadata and at least one of one of the
parameters C<web> or C<mailto> defined in
C<< $meta->{resources}{bugtracker} >>.
=head2 Using Pod::Weaver::Section::Bugs with Dist::Zilla
When the PodWeaver plugin is used, the C<distmeta> parameter comes from the
dist's distmeta data. Since this section is skipped when no bugtracker data is
in the distmeta, you'll need to make sure it's there. A number of plugins set
this data up automatically. To manually configure your bugtracker data, you
can add something like the following to C<dist.ini>:
[MetaResources]
bugtracker.web = http://rt.cpan.org/NoAuth/Bugs.html?Dist=Pod-Weaver-Example
bugtracker.mailto = bug-pod-weaver-example@rt.cpan.org
; Perhaps add repository stuff here:
repository.url =
repository.web =
repository.type =
[PodWeaver]
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 ATTRIBUTES
=head2 header
The title of the header to be added.
(default: "BUGS")
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Section/Collect.pm view on Meta::CPAN
package Pod::Weaver::Section::Collect 4.020;
# ABSTRACT: a section that gathers up specific commands
use Moose;
with 'Pod::Weaver::Role::Section',
'Pod::Weaver::Role::Transformer';
# BEGIN BOILERPLATE
use v5.20.0;
use warnings;
use utf8;
no feature 'switch';
use experimental qw(postderef postderef_qq); # This experiment gets mainlined.
# END BOILERPLATE
#pod =head1 OVERVIEW
#pod
#pod Given the configuration:
#pod
#pod [Collect / METHODS]
#pod command = method
#pod
#pod This plugin will start off by gathering and nesting any C<=method> commands
#pod found in the C<pod_document>. Those commands, along with their nestable
#pod content, will be collected under a C<=head1 METHODS> header and placed in the
#pod correct location in the output stream. Their order will be preserved as it was
#pod in the source document.
#pod
#pod =cut
use Pod::Elemental::Element::Pod5::Region;
use Pod::Elemental::Selectors -all;
use List::Util 1.33 'any';
#pod =attr command
#pod
#pod The command that will be collected (e.g. C<attr> or C<method>).
#pod (required)
#pod
#pod =attr new_command
#pod
#pod The command to be used in the output instead of the collected command.
#pod (default: C<head2>)
#pod
#pod =attr header_command
#pod
#pod The section command for the section to be added.
#pod (default: C<head1>)
#pod
#pod =attr header
#pod
#pod The title of the section to be added.
#pod (default: the plugin name)
#pod
#pod =cut
has command => (
is => 'ro',
isa => 'Str',
required => 1,
);
has new_command => (
is => 'ro',
isa => 'Str',
required => 1,
default => 'head2',
);
has header_command => (
is => 'ro',
isa => 'Str',
required => 1,
default => 'head1',
);
has header => (
is => 'ro',
isa => 'Str',
lazy => 1,
required => 1,
default => sub { $_[0]->plugin_name },
);
use Pod::Elemental::Transformer::Gatherer;
use Pod::Elemental::Transformer::Nester;
has __used_container => (is => 'rw');
sub transform_document {
my ($self, $document) = @_;
my $command = $self->command;
my $selector = s_command($command);
my $children = $document->children;
unless (any { $selector->($_) } @$children) {
$self->log_debug("no $command commands in pod to collect");
return;
}
$self->log_debug("transforming $command commands into standard pod");
my $nester = Pod::Elemental::Transformer::Nester->new({
top_selector => $selector,
content_selectors => [
s_command([ qw(head3 head4 over item back) ]),
s_flat,
],
});
# try and find array position of suitable host
my ( $container_id ) = grep {
my $c = $children->[$_];
$c->isa("Pod::Elemental::Element::Nested")
and $c->command eq $self->header_command and $c->content eq $self->header;
} 0 .. $#$children;
my $container = $container_id
? splice @$children, $container_id, 1 # excise host
: Pod::Elemental::Element::Nested->new({ # synthesize new host
command => $self->header_command,
content => $self->header,
});
$self->__used_container($container);
my $gatherer = Pod::Elemental::Transformer::Gatherer->new({
gather_selector => $selector,
container => $container,
});
$nester->transform_node($document);
my @children = $container->children->@*; # rescue children
$gatherer->transform_node($document); # insert host at position of first adopt-child and inject it with adopt-children
foreach my $child ($container->children->@*) {
$child->command( $self->new_command ) if $child->command eq $command;
}
unshift $container->children->@*, @children; # give original children back to host
}
sub weave_section {
my ($self, $document, $input) = @_;
return unless $self->__used_container;
my $in_node = $input->{pod_document}->children;
my @found = grep {
my ($i, $para) = ($_, $in_node->[$_]);
($para == $self->__used_container)
&& $self->__used_container->children->@*;
} (0 .. $#$in_node);
push $document->children->@*, map { splice @$in_node, $_, 1 } reverse @found;
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Section::Collect - a section that gathers up specific commands
=head1 VERSION
version 4.020
=head1 OVERVIEW
Given the configuration:
[Collect / METHODS]
command = method
This plugin will start off by gathering and nesting any C<=method> commands
found in the C<pod_document>. Those commands, along with their nestable
content, will be collected under a C<=head1 METHODS> header and placed in the
correct location in the output stream. Their order will be preserved as it was
in the source document.
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 ATTRIBUTES
=head2 command
The command that will be collected (e.g. C<attr> or C<method>).
(required)
=head2 new_command
The command to be used in the output instead of the collected command.
(default: C<head2>)
=head2 header_command
The section command for the section to be added.
(default: C<head1>)
=head2 header
The title of the section to be added.
(default: the plugin name)
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Section/GenerateSection.pm view on Meta::CPAN
package Pod::Weaver::Section::GenerateSection 4.020;
# ABSTRACT: add pod section from an interpolated piece of text
use Moose;
with 'Pod::Weaver::Role::Section';
# BEGIN BOILERPLATE
use v5.20.0;
use warnings;
use utf8;
no feature 'switch';
use experimental qw(postderef postderef_qq); # This experiment gets mainlined.
# END BOILERPLATE
use Pod::Elemental::Element::Nested;
use Pod::Elemental::Element::Pod5::Ordinary;
use Text::Template;
use namespace::autoclean;
#pod =head1 SYNOPSIS
#pod
#pod In your F<weaver.ini>
#pod
#pod [GenerateSection]
#pod title = HOMEPAGE
#pod text = This is the POD for distribution {{$name}}. Check out what we have
#pod text = been up to at {{$homepage}}
#pod
#pod The title value can be omited if passed as the plugin name:
#pod
#pod [GenerateSection / HOMEPAGE]
#pod
#pod =head1 DESCRIPTION
#pod
#pod This plugin allows the creation of simple text sections, with or without the
#pod use of Text::Template for templated text.
#pod
#pod The C<text> parameters become the lines of the template.
#pod
#pod The values of text are concatenated and variable names with matching values on
#pod the distribution are interpolated. Specifying the heading level allows one to
#pod write down a rather long section of POD text without need for extra files. For
#pod example:
#pod
#pod [GenerateSection / FEEDBACK]
#pod head = 1
#pod [GenerateSection / Reporting bugs]
#pod head = 2
#pod text = Please report bugs when you find them. While we do have a mailing
#pod text = list, please use the bug tracker at {{$bugtracker_web}}
#pod text = to report bugs
#pod [GenerateSection / Homegape]
#pod head = 2
#pod text = Also, come check out our other projects at
#pod text = {{$homepage}}
#pod
#pod =head1 TEMPLATE RENDERING
#pod
#pod When rendering as a template, the variables C<$plugin>, C<$dist>, and
#pod C<$distmeta> will be provided, set to the GenerateSection plugin,
#pod C<Dist::Zilla> object, and the distribution metadata hash respectively. For
#pod convenience, the following variables are also set:
#pod
#pod =for :list
#pod * C<< $name >>
#pod * C<< $version >>
#pod * C<< $homepage >>
#pod * C<< $repository_web >>
#pod * C<< $repository_url >>
#pod * C<< $bugtracker_web >>
#pod * C<< $bugtracker_email >>
#pod
#pod =attr text
#pod
#pod The text to be added to the section. Multiple values are allowed and will be
#pod concatenated. Certain sequences on the text will be replaced (see below).
#pod
#pod =cut
sub mvp_multivalue_args { return qw(text) }
has text => (
is => 'ro',
isa => 'ArrayRef',
lazy => 1,
default => sub { [] },
);
#pod =attr head
#pod
#pod This is the I<X> to use in the C<=headX> that's created. If it's C<0> then no
#pod heading is added. It defaults to C<1>.
#pod
#pod =cut
has head => (
is => 'ro',
isa => 'Int',
lazy => 1,
default => 1,
);
#pod =attr title
#pod
#pod The title for this section. If none is given, the plugin's name is used.
#pod
#pod =cut
has title => (
is => 'ro',
isa => 'Str',
lazy => 1,
default => sub { $_[0]->plugin_name },
);
#pod =attr main_module_only
#pod
#pod If true, this attribute indicates that only the main module's Pod should be
#pod altered. By default, it is false.
#pod
#pod =cut
has main_module_only => (
is => 'ro',
isa => 'Bool',
lazy => 1,
default => 0,
);
#pod =attr
#pod
#pod If true, the text is treated as a L<Text::Template> template and rendered.
#pod This attribute B<is true by default>.
#pod
#pod =cut
has is_template => (
is => 'ro',
isa => 'Bool',
lazy => 1,
default => 1,
);
sub weave_section {
my ($self, $document, $input) = @_;
if ($self->main_module_only) {
return if $input->{zilla}->main_module->name ne $input->{filename};
}
my $text = join ("\n", $self->text->@*);
if ($self->is_template) {
my %stash;
if ($input->{zilla}) {
%stash = (
dist => \($input->{zilla}),
distmeta => \($input->{distmeta}),
plugin => \($self),
name => $input->{distmeta}{name},
version => $input->{distmeta}{version},
homepage => $input->{distmeta}{resources}{homepage},
repository_web => $input->{distmeta}{resources}{repository}{web},
repository_url => $input->{distmeta}{resources}{repository}{url},
bugtracker_web => $input->{distmeta}{resources}{bugtracker}{web},
bugtracker_email => $input->{distmeta}{resources}{bugtracker}{mailto},
);
}
$text = $self->fill_in_string($text, \%stash);
}
my $element = Pod::Elemental::Element::Pod5::Ordinary->new({ content => $text });
if ($self->head) {
$element = Pod::Elemental::Element::Nested->new({
command => "head" . $self->head,
content => $self->title,
children => [ $element ],
});
}
push $document->children->@*, $element;
}
# BEGIN CODE IMPORTED FROM Dist::Zilla::Role::TextTemplate
#pod =attr delim
#pod
#pod If given, this must be an arrayref with two elements. These will be the
#pod opening and closing delimiters of template variable sections. By default they
#pod are C<{{> and C<}}>.
#pod
#pod =cut
has delim => (
is => 'ro',
isa => 'ArrayRef',
lazy => 1,
init_arg => undef,
default => sub { [ qw( {{ }} ) ] },
);
sub fill_in_string {
my ($self, $string, $stash, $arg) = @_;
$self->log_fatal("Cannot use undef as a template string")
unless defined $string;
my $tmpl = Text::Template->new(
TYPE => 'STRING',
SOURCE => $string,
DELIMITERS => $self->delim,
BROKEN => sub { my %hash = @_; die $hash{error}; },
%$arg,
);
$self->log_fatal("Could not create a Text::Template object from:\n$string")
unless $tmpl;
my $content = $tmpl->fill_in(%$arg, HASH => $stash);
$self->log_fatal("Filling in the template returned undef for:\n$string")
unless defined $content;
return $content;
}
# END CODE IMPORTED FROM Dist::Zilla::Role::TextTemplate
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Section::GenerateSection - add pod section from an interpolated piece of text
=head1 VERSION
version 4.020
=head1 SYNOPSIS
In your F<weaver.ini>
[GenerateSection]
title = HOMEPAGE
text = This is the POD for distribution {{$name}}. Check out what we have
text = been up to at {{$homepage}}
The title value can be omited if passed as the plugin name:
[GenerateSection / HOMEPAGE]
=head1 DESCRIPTION
This plugin allows the creation of simple text sections, with or without the
use of Text::Template for templated text.
The C<text> parameters become the lines of the template.
The values of text are concatenated and variable names with matching values on
the distribution are interpolated. Specifying the heading level allows one to
write down a rather long section of POD text without need for extra files. For
example:
[GenerateSection / FEEDBACK]
head = 1
[GenerateSection / Reporting bugs]
head = 2
text = Please report bugs when you find them. While we do have a mailing
text = list, please use the bug tracker at {{$bugtracker_web}}
text = to report bugs
[GenerateSection / Homegape]
head = 2
text = Also, come check out our other projects at
text = {{$homepage}}
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 ATTRIBUTES
=head2 text
The text to be added to the section. Multiple values are allowed and will be
concatenated. Certain sequences on the text will be replaced (see below).
=head2 head
This is the I<X> to use in the C<=headX> that's created. If it's C<0> then no
heading is added. It defaults to C<1>.
=head2 title
The title for this section. If none is given, the plugin's name is used.
=head2 main_module_only
If true, this attribute indicates that only the main module's Pod should be
altered. By default, it is false.
=head2
If true, the text is treated as a L<Text::Template> template and rendered.
This attribute B<is true by default>.
=head2 delim
If given, this must be an arrayref with two elements. These will be the
opening and closing delimiters of template variable sections. By default they
are C<{{> and C<}}>.
=head1 TEMPLATE RENDERING
When rendering as a template, the variables C<$plugin>, C<$dist>, and
C<$distmeta> will be provided, set to the GenerateSection plugin,
C<Dist::Zilla> object, and the distribution metadata hash respectively. For
convenience, the following variables are also set:
=over 4
=item *
C<< $name >>
=item *
C<< $version >>
=item *
C<< $homepage >>
=item *
C<< $repository_web >>
=item *
C<< $repository_url >>
=item *
C<< $bugtracker_web >>
=item *
C<< $bugtracker_email >>
=back
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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
lib/Pod/Weaver/Section/Generic.pm view on Meta::CPAN
package Pod::Weaver::Section::Generic 4.020;
# ABSTRACT: a generic section, found by lifting sections
use Moose;
with 'Pod::Weaver::Role::Section';
use v5.20.0;
use experimental 'postderef'; # this experiment succeeded -- rjbs, 2021-04-02
#pod =head1 OVERVIEW
#pod
#pod This section will find and include a located hunk of Pod. In general, it will
#pod find a C<=head1> command with a content of the plugin's name.
#pod
#pod In other words, if your configuration include:
#pod
#pod [Generic]
#pod header = OVERVIEW
#pod
#pod ...then this weaver will look for "=head1 OVERVIEW" and include it at the
#pod appropriate location in your output.
#pod
#pod Since you'll probably want to use Generic several times, and that will require
#pod giving each use a unique name, you can omit C<header> if you provide a
#pod plugin name, and it will default to the plugin name. In other words, the
#pod configuration above could be specified just as:
#pod
#pod [Generic / OVERVIEW]
#pod
#pod If the C<required> attribute is given, and true, then an exception will be
#pod raised if this section can't be found.
#pod
#pod =cut
use Pod::Elemental::Element::Pod5::Region;
use Pod::Elemental::Selectors -all;
#pod =attr required
#pod
#pod A boolean value specifying whether this section is required to be present or not. Defaults
#pod to false.
#pod
#pod If it's enabled and the section can't be found an exception will be raised.
#pod
#pod =cut
has required => (
is => 'ro',
isa => 'Bool',
default => 0,
);
#pod =attr header
#pod
#pod The name of this section. Defaults to the plugin name.
#pod
#pod =cut
has header => (
is => 'ro',
isa => 'Str',
lazy => 1,
default => sub { $_[0]->plugin_name },
);
has selector => (
is => 'ro',
isa => 'CodeRef',
lazy => 1,
default => sub {
my ($self) = @_;
return sub {
return unless s_command(head1 => $_[0]);
return unless $_[0]->content eq $self->header;
};
},
);
sub weave_section {
my ($self, $document, $input) = @_;
my $in_node = $input->{pod_document}->children;
my @found = grep {
$self->selector->($in_node->[$_]);
} (0 .. $#$in_node);
confess "Couldn't find required Generic section for " . $self->header . " in file "
. (defined $input->{filename} ? $input->{filename} : '') if $self->required and not @found;
$self->log_debug('adding ' . $self->header . ' back into pod');
push $document->children->@*, map { splice @$in_node, $_, 1 } reverse @found;
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Pod::Weaver::Section::Generic - a generic section, found by lifting sections
=head1 VERSION
version 4.020
=head1 OVERVIEW
This section will find and include a located hunk of Pod. In general, it will
find a C<=head1> command with a content of the plugin's name.
In other words, if your configuration include:
[Generic]
header = OVERVIEW
...then this weaver will look for "=head1 OVERVIEW" and include it at the
appropriate location in your output.
Since you'll probably want to use Generic several times, and that will require
giving each use a unique name, you can omit C<header> if you provide a
plugin name, and it will default to the plugin name. In other words, the
configuration above could be specified just as:
[Generic / OVERVIEW]
If the C<required> attribute is given, and true, then an exception will be
raised if this section can't be found.
=head1 PERL VERSION
This module should work on any version of perl still receiving updates from
the Perl 5 Porters. This means it should work on any version of perl
released in the last two to three years. (That is, if the most recently
released version is v5.40, then this module should work on both v5.40 and
v5.38.)
Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased. The version may be increased
for any reason, and there is no promise that patches will be accepted to
lower the minimum required perl.
=head1 ATTRIBUTES
=head2 required
A boolean value specifying whether this section is required to be present or not. Defaults
to false.
If it's enabled and the section can't be found an exception will be raised.
=head2 header
The name of this section. Defaults to the plugin name.
=head1 AUTHOR
Ricardo SIGNES <cpan@semiotic.systems>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 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