// declare helpful macros +BU:\B<\U<__body__>> // general headline =FAQ // process all articles dynamically \EMBED{lang=perl} { # declare variables my $perlPoint=''; # get all subdirectories opendir(D, 'faq') or die qq([Fatal] Cannot open directory "faq"\n); my @categories=grep((-d "faq/$_" and !/^\./), readdir(D)); closedir(D); # process all categories foreach my $category (@categories) { # declare variables my %questions; # pass category name to PerlPoint $perlPoint.="\n\n==$category\n\n"; # get all questions of this category opendir(D, "faq/$category") or warn(qq([Error] Cannot open theme directory "faq/$category"\n)), next; my @questions=grep(/\.pp$/, readdir(D)); closedir(D); # open all files and extract their questions foreach my $question (@questions) { # open file open(Q, "faq/$category/$question") or warn(qq([Error] Cannot open question file "faq/$category/$question"\n)), next; # extract question while () { # find question next unless /^=+(.+)$/; # and store it push(@{$questions{$1}}, $question); } # close file close(Q); } # anything found? if (%questions) { # process questions in sorted order foreach my $question (sort keys %questions) { # pass the file(s) to PerlPoint $perlPoint.=qq(\n\n\\INCLUDE{file="faq/$category/$_" type=pp headlinebase=CURRENT_LEVEL}\n\n) foreach @{$questions{$question}}; } } } # supply generated PerlPoint $perlPoint; } \END_EMBED