#! /usr/bin/perl
use strict;
use warnings;
use feature qw(state);
use experimental qw(switch);
my $input_file = $ARGV[0];
my $output_file = $ARGV[1];
my $style_sheet = $ARGV[2];
if (defined $input_file and $input_file ne "-") {
open IN, $input_file or die "Could not open input file $input_file!";
}
else {
*IN = *STDIN;
}
if (defined $output_file and $output_file ne "-") {
open OUT, $output_file or die "Could not open output file $output_file!";
}
else {
*OUT = *STDOUT;
}
my $style_stanza = <<'END_HTML';
END_HTML
if (defined $style_sheet) {
$style_stanza = <<"END_HTML";
END_HTML
}
print OUT <<'END_HTML';
END_HTML
my $title = ;
chomp $title;
my $old_title = $title;
$title =~ s/^#\s*//;
print OUT <<"END_HTML";
$title
$style_stanza
END_HTML
my $line = convert_gmi_line($old_title);
print OUT " $line";
foreach $line () {
chomp $line;
my $out = convert_gmi_line($line);
if (defined $out) {
print OUT " $out";
}
}
print OUT <<'END_HTML';
END_HTML
sub convert_gmi_line {
state $pre = 0;
state $list = 0;
my ($line) = @_;
if ($pre == 1) {
if ($line eq '```') {
$pre = 0;
return "\n";
}
return " $line\n";
}
if ($line eq '```') {
$pre = 1;
if ($list == 1) {
$list = 0;
return "\n
\n";
}
return "
\n";
}
if ($list == 0) {
if ($line =~ /^\* /) {
$list = 1;
my $listitem = convert_gmi_line($line);
return "
\n $listitem";
}
}
else {
if (not $line =~ /^\* /) {
$list = 0;
my $nextline = convert_gmi_line($line);
if (defined $nextline) {
return "