#! perl # mandatory our @BOOKS; sub reload() { @BOOKS = (); my $paragraphs = cf::pod::load_pod "$PODDIR/books.pod" or die "unable to load $PODDIR/books.pod"; my $level = 1e9; my @books; for my $par (@$paragraphs) { if ($par->{type} eq "head1") { if ($par->{markup} =~ /^(\S+)/) { push @books, [$par]; $level = $par->{level}; } } elsif ($par->{level} > $level) { push @{ $books[-1] }, $par; } } @BOOKS = @books; } cf::sync_job { reload; }; sub make_book { my ($book, $level) = @_; return unless @BOOKS; my ($title, @body) = @{$BOOKS[rand @BOOKS]}; $title = cf::pod::as_text [$title]; $title =~ s/\n/ /g; $title =~ s/ +$//; $book->name ($title); $book->name_pl ($title); $book->title (undef); $book->msg (cf::pod::as_text \@body); }