gmi2html: fix lists
This commit is contained in:
parent
edb2d4650f
commit
a265d9a5af
68
bin/gmi2html
68
bin/gmi2html
|
@ -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";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue