cbffc0beb45e3313321c00dac0a42c8e40f5c857
[sheet.git] / tools / mksitemap
1 #!/usr/bin/env perl
2 use 5.014;
3 use warnings;
4
5 our $VERSION = '1.03';
6
7 use File::stat;
8 use Time::Piece;
9
10 my @pages = (
11         [qw( index )],
12         [qw( vi digraphs charset browser writing sc/lotv termcol dieren )],
13         [qw( readline latin unicode countries emoji perl keyboard/altgr )],
14         [qw(
15                 vimperator mutt nethack mplayer/mpv font codec
16                 keyboard/altgr/windows keyboard/altgr/macos
17                 dieren/uitgebreid dieren/beknopt
18         )],
19         [qw(
20                 apl less screen digits sc/bw sc/hots termcol/legacy mplayer
21                 keyboard/altgr/macos-abc keyboard/altgr/msx keyboard/altgr/ukext
22                 keyboard/altgr/eurkey keyboard/altgr/apl keyboard/altgr/spacecadet
23                 keyboard/altgr/ipa
24         )],
25         [qw( chars/table/html sample source plan )],
26 );
27
28 my %freq = (
29         (map { $_ => 'yearly' } qw[ readline nethack mplayer apl ]),
30         (map { $_ => 'weekly' } qw[ browser ]),
31 );
32
33 my %known = map { s{/.*}{}r => 1 } map { @{$_} } @pages;
34 $known{$_} or warn "page $_ undeclared\n"
35         for grep { !/\./ } map { s/\.plp\z//r } glob '*.plp';
36
37 say '<?xml version="1.0" encoding="UTF-8"?>';
38 say '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
39 for my $group (@pages) {
40         state $prio = 1;
41         for my $file (@{$group}) {
42                 (my $page = $file) =~ s/\Aindex\z//;
43                 if (-e "$file.eng.inc.pl") {
44                         $file .= '.eng.inc.pl';
45                 }
46                 else {
47                         $file =~ s{/.*}{};
48                         $file .= '.plp';
49                 }
50                 my $stat = stat $file or do {
51                         warn "missing file $file\n";
52                         next;
53                 };
54
55                 print '<url>';
56                 print "<loc>https://sheet.shiar.nl/$page</loc>";
57                 printf '<changefreq>%s</changefreq>', $freq{$page} // 'monthly';
58                 printf '<priority>%.2f</priority>', $prio;
59                 printf '<lastmod>%s</lastmod>', localtime($stat->mtime)->date;
60                 say '</url>';
61         }
62         $prio -= .1;
63 }
64 say '</urlset>';
65