gmi2html: fix lists

This commit is contained in:
Sam Greytalon 2023-04-15 19:21:20 -07:00
parent edb2d4650f
commit a265d9a5af
1 changed files with 42 additions and 26 deletions

View File

@ -51,14 +51,14 @@ print OUT <<"END_HTML";
END_HTML
my $line = convert_gmi_line($old_title);
print OUT " $line\n";
print OUT " $line";
foreach $line (<IN>) {
chomp $line;
my $out = convert_gmi_line($line);
if (defined $out) {
print OUT " $out\n";
print OUT " $out";
}
}
@ -68,30 +68,50 @@ print OUT <<'END_HTML';
END_HTML
sub convert_gmi_line {
state $mode = 'normal';
state $pre = 0;
state $list = 0;
my ($line) = @_;
if ($mode eq 'pre') {
if ($pre == 1) {
if ($line eq '```') {
$mode = 'normal';
return undef;
$pre = 0;
return "</pre>\n";
}
return $line;
return " $line\n";
}
if ($line =~ /^\* /) {
if ($list == 0) {
return '<ul>';
if ($line eq '```') {
$pre = 1;
if ($list == 1) {
$list = 0;
return "</ul>\n <pre>\n";
}
return "<pre>\n";
}
if ($list == 0) {
if ($line =~ /^\* /) {
$list = 1;
my $listitem = convert_gmi_line($line);
return "<ul>\n $listitem";
}
}
else {
if ($list == 1) {
return '</ul>';
if (not $line =~ /^\* /) {
$list = 0;
my $nextline = convert_gmi_line($line);
if (defined $nextline) {
return "</ul>\n $nextline";
}
else {
return "</ul>\n";
}
}
}
@ -102,43 +122,39 @@ sub convert_gmi_line {
my $text = $2;
$link =~ s/\.gmi/\.html/;
return "<p><a href=\"$link\">$text</a></p>";
return "<p><a href=\"$link\">$text</a></p>\n";
}
when(/^#[^#]/) {
$line =~ s/^#\s*//;
return "<h1>$line</h1>";
return "<h1>$line</h1>\n";
}
when(/^##[^#]/) {
$line =~ s/^##\s*//;
return "<h2>$line</h2>";
return "<h2>$line</h2>\n";
}
when(/^###/) {
$line =~ s/^###\s*//;
return "<h3>$line</h3>";
return "<h3>$line</h3>\n";
}
when(/^\*\s*/) {
$line =~ s/^\*\s*//;
return "<li>$line</li>";
return " <li>$line</li>\n";
}
when(/^>/) {
$line =~ s/^>//;
$line =~ s/^>\s*//;
return "<blockquote>$line</blockquote>";
}
when('```') {
$mode = 'pre';
return undef;
return "<blockquote>$line</blockquote>\n";
}
default {
if ($line eq '') {
return undef;
}
return "<p>$line</p>";
return "<p>$line</p>\n";
}
}
}