Basic index generation

This commit is contained in:
Nathan McCarty 2024-12-20 10:33:05 +00:00
parent 9909840b65
commit a06df05580

View file

@ -3,6 +3,7 @@
use paths;
use File::Temp;
use DOM::Tiny;
use HTML::Lazy (:ALL);
my $build-path;
my $dir;
@ -52,6 +53,49 @@ sub render-idris-file($idr) {
# Make sure the directory exists and write the contents to it
$out-file.dirname.IO.mkdir;
$out-file.spurt: $contents;
# Return the out-file
$out-file
}
# Add a path to our index hash
my method add-path(%index: $path, $value) {
# Split the path up
my @parts = $path.split("/");
my $head = @parts[0];
@parts = @parts[1..*-1];
if @parts.elems == 0 {
%index{$head} = $value;
} else {
if !%index{$head} {
%index{$head} = %();
}
%index{$head}.&add-path(join('/', @parts), $value);
}
}
# Render the index to html
my method render-index(%index:) {
my @elements = [];
for %index.keys -> $key {
say "";
say $key;
say %index{$key} ~~ Str;
say %index{$key};
say "";
given %index{$key} {
when Str {
my $x = $_;
@elements.push(
li(Map,
a({ :href($x) }, text($key))));
}
default {
my $rest = $_.&render-index();
@elements.push(li(Map, text($key), $rest));
}
}
}
ul(Map, @elements)
}
sub MAIN(
@ -84,11 +128,24 @@ sub MAIN(
# For each of our idris files, find the ttm, and generate the output in the
# temporary directory
my %index = %();
for @idris-files.hyper :batch(1) -> $idr {
render-idris-file $idr;
# TODO : Build index
my $out = render-idris-file $idr;
%index.&add-path($idr, $out.relative($dir)) when $out ~~ IO;
}
my $index = %index.&render-index();
my $title = $*CWD.basename;
$index = html-en
head(Map,
title(Map, text($title))
),
body(Map,
$index
);
"$dir/index.html".IO.spurt(render($index));
# Figure out our destination
my $dest = do if $dest_dir ~~ Str {
$dest_dir