NAME

Pod::Elemental::MakeSelector - Build complex selectors as a single sub

VERSION

This document describes version 0.04 of Pod::Elemental::MakeSelector, released April 18, 2015.

SYNOPSIS

use Pod::Elemental::MakeSelector;

my $author_selector = make_selector(
  -command => 'head1',
  -content => qr/^AUTHORS?$/,
);

DESCRIPTION

The selectors provided by Pod::Elemental::Selectors are fairly limited, and there's no built-in way to combine them. For example, there's no simple way to generate a selector that matches a section with a specific name (a fairly common requirement).

This module exports a single subroutine: make_selector. It can handle everything that Pod::Elemental::Selectors can do, plus many things it can't. It also makes it easy to combine criteria. It compiles all the criteria you supply into a single coderef.

A selector is just a coderef that expects a single parameter: an object that does Pod::Elemental::Paragraph. It returns a true value if the paragraph meets the selector's criteria.

CRITERIA

Most criteria that accept a parameter test it using smart matching, which means that they accept a string, a regex, or an arrayref of strings and/or regexes. (This also means that Perl 5.10.1 is required to use Pod::Elemental::MakeSelector.)

Optional parameters must not begin with -, or they will be treated as criteria instead. If you need an optional parameter that begins with -, put it inside an arrayref.

Simple Criteria

-blank, # isa Pod::Elemental::Element::Generic::Blank
-flat,  # does Pod::Elemental::Flat
-node,  # does Pod::Elemental::Node

Command Paragraphs

-command,           # does Pod::Elemental::Command
-command => 'head1',           # and is =head1
-command => qr/^head[23]/,     # and matches regex
-command => [qw(head1 head2)], # 1 element must match

Content

-content => 'AUTHOR',       # matches =head1 AUTHOR
-content => qr/^AUTHORS?$/, # or =head1 AUTHORS
-content => [qw(AUTHOR BUGS)], # 1 element must match

This criterion is normally used in conjunction with -command to select a section with a specific title.

Regions

-region, # isa Pod::Elemental::Element::Pod5::Region
-region => 'list',      # and format_name eq 'list'
-region => qr/^list$/i, # and format_name matches regex
-region => [qw(list group)], # 1 element must match
-podregion    => 'list',          # =for :list
-nonpodregion => 'Pod::Coverage', # =for Pod::Coverage

Regions are created with the =begin or =for commands. The -podregion and -nonpodregion criteria work exactly like -region, but they ensure that is_pod is either true or false, respectively.

Conjunctions

-and => [ ... ], # all criteria must be true
-or  => [ ... ], # at least one must be true

These take an arrayref of criteria, and combine them using the specified operator. Note that make_selector does -and by default; make_selector @criteria is equivalent to make_selector -and => \@criteria.

Custom Criteria

-code => sub { ... }, # test $_[0] any way you want
-code => $selector,   # also accepts another selector

SUBROUTINES

make_selector

$selector = make_selector( ... );

make_selector takes a list of criteria and returns a selector that tests whether a supplied paragraph matches all the criteria. It does not allow you to pass a paragraph to be checked immediately; if you want to do that, then call the selector yourself. i.e., these two lines are equivalent:

s_command(head1 => $para); # From Pod::Elemental::Selectors
make_selector(qw(-command head1))->($para);

SEE ALSO

Pod::Elemental::Selectors comes with Pod::Elemental, but is much more limited than this module.

DEPENDENCIES

Pod::Elemental::MakeSelector requires Pod::Elemental and Perl 5.10.1 or later.

BUGS

Please report any bugs or feature requests to bug-pod-elemental-makeselector@rt.cpan.org or through the web interface at: http://rt.cpan.org/Public/Dist/Display.html?Name=Pod-Elemental-MakeSelector

AUTHOR

Christopher J. Madsen <perl@cjmweb.net>

SOURCE

The development version is on github at http://github.com/madsen/pod-elemental-makeselector and may be cloned from git://github.com/madsen/pod-elemental-makeselector.git

COPYRIGHT AND LICENSE

This software is copyright (c) 2015 by Christopher J. Madsen.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.