1 04eab9af 2022-08-25 op package GotMArc;
7 04eab9af 2022-08-25 op our @ISA = qw(Exporter);
8 de557185 2022-08-26 op our @EXPORT_OK = qw($logo san parse initpage endpage);
10 04eab9af 2022-08-25 op our $logo = <<'EOF';
11 04eab9af 2022-08-25 op <a href="https://gameoftrees.org" target="_blank">
12 04eab9af 2022-08-25 op <img srcset='/got-tiny.png, /got-tiny@2x.png 2x'
13 04eab9af 2022-08-25 op src='/got-tiny.png'
14 04eab9af 2022-08-25 op width='64' height='39'
15 04eab9af 2022-08-25 op alt='"GOT", but the "O" is a cute, smiling sun' /></a>
19 04eab9af 2022-08-25 op my $str = shift;
20 04eab9af 2022-08-25 op $str =~ s/&/\&/g;
21 04eab9af 2022-08-25 op $str =~ s/</\</g;
22 04eab9af 2022-08-25 op $str =~ s/>/\>/g;
27 de557185 2022-08-26 op my $str = shift;
28 de557185 2022-08-26 op $str =~ s/\s+/ /g;
29 de557185 2022-08-26 op $str =~ s/\s+$//;
30 de557185 2022-08-26 op return san($str);
33 2064ca3f 2022-08-25 op sub mid2path {
34 2064ca3f 2022-08-25 op my $mid = shift;
35 2064ca3f 2022-08-25 op $mid =~ s,_,__,g;
36 2064ca3f 2022-08-25 op $mid =~ s,/,_,g;
41 de557185 2022-08-26 op my ($indent, $fname, $mid, $date, $from, $subj) = m{
42 de557185 2022-08-26 op ^([^-]*)- # the indent level
43 de557185 2022-08-26 op ([^ ]+)\s # filename
44 de557185 2022-08-26 op <([^>]+)> # message id
45 de557185 2022-08-26 op (\d{4}-\d\d-\d\d[ ]\d\d:\d\d) # date
46 de557185 2022-08-26 op <([^>]+)> # from
47 de557185 2022-08-26 op (.*) # subject
48 de557185 2022-08-26 op }x or die "can't parse: $_";
50 de557185 2022-08-26 op my $level = length($indent);
51 de557185 2022-08-26 op $level = 10 if $indent =~ m/\.\.\d+\.\./;
53 de557185 2022-08-26 op $mid = mid2path($mid);
54 de557185 2022-08-26 op $from = ssan($from);
55 de557185 2022-08-26 op $subj = ssan($subj);
57 de557185 2022-08-26 op return ($level, $fname, $mid, $date, $from, $subj);
60 04eab9af 2022-08-25 op my $hdr = do {
61 04eab9af 2022-08-25 op local $/ = undef;
62 04eab9af 2022-08-25 op open my $fh, "<", "head.html"
63 04eab9af 2022-08-25 op or die "can't open head.html: $!";
67 04eab9af 2022-08-25 op sub initpage {
68 04eab9af 2022-08-25 op my ($fh, $title) = @_;
69 04eab9af 2022-08-25 op say $fh $hdr =~ s/TITLE/$title/r;
72 04eab9af 2022-08-25 op my $foot = do {
73 04eab9af 2022-08-25 op local $/ = undef;
74 04eab9af 2022-08-25 op open my $fh, "<", "foot.html"
75 04eab9af 2022-08-25 op or die "can't open foot.html: $!";
80 04eab9af 2022-08-25 op my $fh = shift;
81 04eab9af 2022-08-25 op say $fh $foot;