#! /opt/pkg/bin/perl $tmpfile = "/tmp/hol2txt.$$"; sub dopara { my(%sn, %newloc); foreach (@_) { s/----.*----\n//g; s/^\*//; s!!_!g; s!!!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!!_!g; s!!!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($_);