NAME

Markdown::TOC - Create a table of contents from markdown

SYNOPSIS

use Markdown::TOC;

my $toc = Markdown::TOC->new(handler => sub {
    my %params = @_;

    return '+' x $params{level} . ' ' . $params{text};
});

my $md = q{
# header1 

some text

## header 2

some another text

};

my $toc_html = $toc->process;

DESCRIPTION

Markdown::TOC is a simple module for building table of contents of markdown files. The module itself produces a very simple and rather ugly table of contents, it is supposed to be used with handlers to provide a nice custom-formatted toc.

METHODS

new

my $toc = Markdown::Toc->new(
    handler => sub { ... },
    order_handler => sub { ... },
    anchor_handler => sub { ... },

    delimeter => "\n"
)

Creates a new TOC processor.

delimeter - is used for final strings concatenations, an empty string by default.

All handlers are described below.

process

Produces formatted TOC from the provided markdown content.

$toc->process($md);

HANDLERS

When a header is discovered, an event is fired. So several handlers could be defined to take care of actual formatting.

raw_handler

Takes half-raw data and takes care of all formatting. Accepts $text - text content of a header and $level - header level

my $toc = Markdown::TOC->new(raw_handler => sub {
    my ($text, $level) = @_;
    # Do something about that
});

handler

Takes processed data, like text, level, determined order and an anchor for a header.

my $toc = Markdown::TOC->new(handler => sub{
    my (%param) = @_;

    my $text = $param{text};
    my $anchor = $param{anchor};
    my $order_formatted = $param{order_formatted};
    my $order = $param{order}; # an array like [1, 2, 1], where the first element contains first level number and so on

    # format text and give it away
});

anchor_handler

Takes $text and $level and returns an anchor for a header link (If we want the link in toc to point on the header. Or somewhere else)

my $toc = Markdown::TOC->new(anchor_handler => sub {
    my ($text, $level) = @_;
    my $anchor = $text;
    # getting rid of all spaces..
    $anchor =~ s/\s+/_/g;
    return $anchor;
});

order_handler

Takes $text and $level and returns a formatted order mark for our future table of contents.

my $toc = Markdown::TOC->new(sub {
    my ($text, $level) = @_;
    return 42;
});

If this handler and handler were specified, the result from the callback is passed as order_formatted parameter.

listener

Like raw_handler, but returns nothing.

my $table = [];
my $toc = Markdown::TOC->new(listener => sub {
    my ($text, $level) = @_;
    push @$table, {text => $text, level => $level};
});

LICENSE

Copyright (C) Polina Shubina.

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

AUTHOR

Polina Shubina <925043@gmail.com>