diff --git a/dist/ntp/ntp-html2mdoc.pl b/dist/ntp/ntp-html2mdoc.pl new file mode 100755 index 000000000000..c82beee526f3 --- /dev/null +++ b/dist/ntp/ntp-html2mdoc.pl @@ -0,0 +1,145 @@ +#!/usr/pkg/bin/perl + +require "ctime.pl"; + +$sec = 8; # XXX + +sub swallow { + my ($what) = @_; + + while (<>) { + chomp; + return if /$what/i; + } +} + +sub chew { + my ($match, $reset) = @_; + + $_ = undef if $reset; + while (!(/$match/i)) { + chomp($_ .= " " . <>); + } +} + +sub detag { + s/<[^>]+>//g; +} + +sub dehtmlchar { + s/ / /g; + s/<//g; +} + +($mday, $mon, $year) = (localtime(time))[3 .. 5]; +$date = sprintf "%s %02d, %d", $ctime'MoY[$mon], $mday, $year + 1900; + +swallow("

"); +chomp($_ = <>); +detag; +($name, $descr) = split(' ', $_, 2); +$descr =~ s/^\s*-\s*//; +($NAME = $name) =~ tr/a-z/A-Z/; + +print <", 1); +detag; +s/^\s*$name\s*//; +@args = split; +while ($_ = shift @args) { + next if /\[/; + s/^-//; + print ".Op Fl $_"; + if (defined($args[0]) && $args[0] ne "]") { + print " Ar ", shift @args; + } + print "\n"; + shift @args; # remove the "]" +} + +while (<>) { + chomp; + next if length == 0; + if (/^

/i) { + chew("

"); + detag; + tr/a-z/A-Z/; + s/^\s+//; + dehtmlchar; + print ".Sh $_\n"; + next; + } + if (/
/i) { + chew("
"); + detag; + s/^\s+//; + dehtmlchar; + print ".Sh AUTHOR\n$_\n"; + next; + } + if (/
/i) { + print ".Bl -tag -width indent\n"; + next; + } + if (m#
#i) { + print ".El\n"; + next; + } + if (/
/i) { + chew("
"); + detag; + s/^\s*-//; + s/ / Ar /; + dehtmlchar; + print ".It Fl $_\n"; + next; + } + if (/-/) { + # command line option + chew(""); + s#-([^<]*)#\n.Fl $1\n#ig; + s###ig; + s#([^<]+)#\n.Ar $1\n#ig; + } + if (/"); + chomp($_ .= " " . <>) if (/\1#\n.Xr \1 $sec\n#ig; + s#(.*?) + *page#\n.%T "$2"\npage in\n.Pa /usr/share/doc/ntp/$1\n#ig; + s#^
##g; + s#(.*?)#For\n.%T "$2"\n, refer to\n.Pa /usr/share/doc/ntp/$1 .\n.Pp\n#ig; + detag; + } + s#$name#\n.Nm\n#ig; + s#([^<]*)#\n.Pa $1\n#ig; + s#]*>([^<]*)#\n.Pa $1\n#ig; + s#
#.Pp\n.nf\n#ig;
+	s#
#\n.fi\n.Pp\n#ig; + s#

#\n.Pp\n#ig; + s#<(HR|DD)>##ig; + s###ig; + s#([^<]+)#\n.Ar $1\n#ig; + dehtmlchar; + s/^\s+//; + s/\n+\s*/\n/g; + s/\n.Nm\n([,\.:]) /\n.Nm "" $1\n/g; + s/\n\.(Pa|%T) (.*)\n([,\.:]) /\n.$1 $2 $3\n/g; + s/\n$//; + print $_, "\n" if length > 0; +}