Pod::Utils

Toolset of functions to ease working with Pod6s!

NAME

Pod::Utils - Set of helper functions to ease working with Pods!

SYNOPSIS

    use Pod::Utils;

    # time to work with Pod::* elements!
    say first-subtitle($=pod[0].contents);

    =begin pod

    =SUBTITLE Some cool text

    =end pod

DESCRIPTION

Pod::Utils is a set of routines that help you to deal with Pod elements. It lets you manipulate several kinds of Pod objects, obtain gists and modify headings.

sub first-code-block

sub first-code-block (
    Array @pod
) returns Str;

Returns the first Pod::Block::Code found in an array, concatenating all lines in it. If none is found, it will return an empty string.

Example:

=begin pod
=begin code

    say "some code";
    say "more code";

=end code
=end pod

first-code-block($=pod[0].contents)

# OUTPUT «say "some code";␤say "more code";␤»

sub first-title

sub first-title (
    Array @pod
) returns Pod::Block::Named;

Returns the first =TITLE element found in @pods.

Example:

=begin pod

=TITLE title

=end pod

first-title($=pod[0].contents)

# OUTPUT equivalent to:

=TITLE title

sub first-subtitle

sub first-subtitle (
    Array @pod
) returns Pod::Block::Named;

Returns the first =SUBTITLE element found in @pods.

Example:

=begin pod

=subTITLE subtitle

=end pod

first-subtitle($=pod[0].contents)

# OUTPUT equivalent to:

=SUBTITLE subtitle

multi sub textify-guts

multi textify-guts (Any:U,       ) return Str;
multi textify-guts (Str:D      \v) return Str;
multi textify-guts (List:D     \v) return Str;
multi textify-guts (Pod::Block \v) return Str;

Converts lists of Pod::Block::* objects and Pod::Block objects to strings.

Example:

my $block = Pod::Block::Para.new(contents => ["block"]);
say textify-guts($block); # OUTPUT «block␤»
say textify-guts([$block, $block]); # OUTPUT «block block␤»

multi sub recurse-until-str

multi sub recurse-until-str(Str:D $s)      return Str;
multi sub recurse-until-str(Pod::Block $n) return Str;

Accepts a Pod::Block::* object and returns a concatenation of all subpods content.

Example:

my $block         = Pod::Block::Para.new(contents => ["block"]);
my $complex-block = pod-block("one", pod-block("two"), pod-bold("three"));
say recurse-until-str($block); # OUTPUT «block␤»
say recurse-until-str($complex-block); # OUTPUT «onetwothree␤»

Pod::Utils::Build

SYNOPSIS

    use Pod::Utils::Build;

    # time to build Pod::* elements!
    say pod-bold("bold text");

DESCRIPTION

Pod::Utils::Build is a set of routines that help you to create new Pod elements.

sub pod-title

sub pod-title (
    Str $title,
) returns Pod::Block::Named;

Creates a new Pod::Block::Named object (with :name set to "TITLE") and populates it with a Pod::Block::Para containing $title.

Example:


pod-title("title");

# OUTPUT Equivalent to:

=begind pod

=TITLE title

=end pod

sub pod-with-title

sub pod-with-title (
    Str $title,
    Array @blocks
) returns Pod::Block::Named;

Creates a new Pod::Block::Named object (with :name set to "pod") and populate it with a title (using pod-title) and @blocks.

Example:


=begind pod

Normal paragraph

=end pod

pod-with-title("title", $=pod.first.contents[0]);

# OUTPUT Equivalent to:

=beging pod

=TITLE title

Normal paragraph

=end pod

sub pod-block

sub pod-block (
    Array *@contents
) returns Pod::Block::Para;

Creates a Pod::Block::Para with contents set to @contents.

Example:



say pod-block("title", Pod::Block::Para.new(contents => ["paragraph"]));

# OUTPUT

Pod::Block::Para
  title
  Pod::Block::Para
    paragraph

sub pod-link

sub pod-link (
    Str $text,
    Str $url
) returns Pod::FormattingCode;

Creates a Pod::FormattingCode (type Link) with contents set to $text. and meta set to $url.

Example:


pod-link("text","url");

# OUTPUT Equivalent to:

L<text|url>

sub pod-bold

sub pod-bold (
    Str $text,
) returns Pod::FormattingCode;

Creates a Pod::FormattingCode (type B) with contents set to $text.

Example:


pod-bold("text");

# OUTPUT Equivalent to:

B<text>

sub pod-code

sub pod-code (
    Str $text,
) returns Pod::FormattingCode;

Creates a Pod::FormattingCode (type C) with contents set to $text.

Example:


pod-code("text");

# OUTPUT Equivalent to:

C<text>

sub pod-item

sub pod-item (
    Array *@contents ,
    Int   :$level = 1,
) returns Pod::Item;

Creates a Pod::Item object with contents set to @contents and level to $level.

Example:


pod-item(pod-block("item"), level => 1);

# OUTPUT Equivalent to:

=item item

sub pod-heading

sub pod-heading (
    Str   $name,
    Int   :$level = 1,
) returns Pod::Heading;

Creates a Pod::Heading object with level set $level and contents initialized with a Pod::Block::Para object containing $name.

Example:


pod-heading("heading", level => 1);

# OUTPUT Equivalent to:

=head1 heading

sub pod-table

sub pod-table (
    Array @contents,
    Array :@headers,
) returns Pod::Block::Table;

Creates a Pod::Block::Table object with the headers @headers and rows @contents. $caption is set to "". Example:


pod-table([["col1", "col2"],], headers => ["h1", "h2"]);

# OUTPUT Equivalent to:

=begin table

h1   | h2
============
col1 | col2

=end table

sub pod-lower-headings

sub pod-lower-headings (
    Array @content,
    Int   :$to,
) returns Array;

Given an array of Pod objects, lower the level of every heading following the next formula => current-level - $by + $to, where $by is the level of the first heading found in the array.

Example:


my @contents = [
    pod-heading("head", level => 2),
    pod-heading("head", level => 3)
];

pod-lower-headings(@contents)

# OUTPUT Equivalent to:

=head1 head

=head2 head

AUTHORS

Alexander Mouquin <@Mouq>

Will Coleda <@coke>

Rob Hoelz <@hoelzro>

<@timo>

Moritz Lenz <@moritz>

Juan Julián <@JJ>

<@MasterDuke17>

Zoffix Znet <@zoffixznet>

Antonio <@antoniogamiz>

COPYRIGHT AND LICENSE

Copyright 2019 Perl 6 team

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.

Pod::Utils v0.0.2

Toolset of functions to ease working with Pod6s!

Authors

  • @Mouq
  • @coke
  • @hoelzro
  • @timo
  • @moritz
  • @JJ
  • @MasterDuke17
  • @zoffixznet
  • @antoniogamiz

License

Artistic-2.0

Dependencies

Test Dependencies

Provides

  • Pod::Utils
  • Pod::Utils::Build

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.