#! /opt/pkg/bin/perl

$tmpfile = "/tmp/hol2txt.$$";

sub dopara {
  my(%sn, %newloc);
  foreach (@_) {
    s/----.*----\n//g;
    s/^\*//;
    s!</?i>!_!g;
    s!</?b>!!g;
    s/\[([aeou][emn])\]/$1/g;
    s/\[=(.)\]/$1/g;
    s/æ/ae/g;
    s/Æ(?=[a-z])/Ae/g;
    s/Æ/AE/g;

    %sn = ();
    while (s/\[Sidenote: \[.*?]]\n//s ||
	   s/\[Sidenote.*?]\n//s) {
      $sn{length($`)} .= $&;
    }
    open TXT, "> $tmpfile";
    print TXT $_;
    close TXT;
    $_ = `fmt $tmpfile`;
    foreach $i (keys %sn) {
      /.{0,$i}^/sm;
      $newloc{$i} = length($&);
    }
    foreach $i (reverse sort {$a <=> $b} keys %sn) {
      substr($_, $newloc{$i}, 0) = $sn{$i};
    }
    print "$_\n";
  }
}

sub doverbatim {
  foreach (@_) {
    s!</?i>!_!g;
    s!</?b>!!g;
    s/\[([aeou][emn])\]/$1/g;
    s/\[=(.)\]/$1/g;
    s/æ/ae/g;
    s/Æ(?=[a-z])/Ae/g;
    s/Æ/AE/g;
    s/^.*\n//;
    print;
  }
}

LINE:
do {
  do {$_ = <>} while /^----.*----\n/;
  if (!defined($end)) {
    if ($_ =~ /^\/\*/) {
      $end = "*/\n";
    } else {
      $end = "\n";
    }
  }
  if (!defined($_) || $_ eq "$end") {
    if ($a =~ /^\/\*(\n| txt)/) {
      doverbatim($a);
    } elsif ($a =~ /^\/\*/) {
      ;
    } else {
      dopara($a);
    }
    $a = "";
    undef($end);
  } else {
    $a .= $_;
  }
} while defined($_);
