use Pod::Load; use Pod::To::Markdown; grammar Weave { token TOP { [ | ]* } token pod { ^^ '=begin' <.ws> (\w+) .*? '=end' <.ws> $0 \N* \n} token code { [ ^^ \N* \n]+ } } #| Weave Markdown documentation from Raku code sub MAIN($file, Bool :t(:$tangle), #= Tangle the file instead of weaving it (the default) ) { my $parsed-input = Weave.parsefile($file.IO); when $tangle { $parsed-input.caps.map({ when .key eq 'pod' { '' } when .key eq 'code' { ~.value } }).join.print }; when !$tangle { $parsed-input.caps.map({ when .key eq 'pod' { ~.value } when .key eq 'code' { qq:to/EOF/ } =begin pod =begin code :lang {.value} =end code =end pod EOF }).join("\n") ==> load() ==> pod2markdown() ==> print() }; }