diff -Nur linux-2.6.0-test3-bk1/scripts/makeman linux-2.6.0-test3-bk1-terseman-001/scripts/makeman --- linux-2.6.0-test3-bk1/scripts/makeman 2003-08-12 14:35:41.000000000 +1000 +++ linux-2.6.0-test3-bk1-terseman-001/scripts/makeman 2003-08-13 10:24:10.000000000 +1000 @@ -12,7 +12,7 @@ ## $3 -- the filename which contained the sgmldoc output ## (I need this so I know which manpages to convert) -my($LISTING); +my($LISTING, $GENERATED, $INPUT, $OUTPUT, $front, $mode, $filename); if($ARGV[0] eq ""){ die "Usage: makeman [convert | install] \n"; @@ -32,8 +32,121 @@ s/typedef //; chomp; - print "Processing $_\n"; - system("cd $ARGV[1]; docbook2man $_.sgml; gzip -f $_.9\n"); + $filename = $_; + print "Processing $filename\n"; + + # Open the input file to extract the front matter, generate the man page, + # and open it, and the rearrange everything until it is happy + open INPUT, "< $ARGV[1]/$filename.sgml"; + $front = ""; + $mode = 0; + while(){ + if(/.*ENDFRONTTAG.*/){ + $mode = 0; + } + + if($mode > 0){ + s///; + s///; + s/<\/bookinfo>//; + s///; + s<\/docinfo>//; + s/^[ \t]*//; + } + + if($mode == 2){ + if(//){ + } + elsif(/<\/para>/){ + $front = "$front.\\\" \n"; + } + elsif(/<\/legalnotice>/){ + $mode = 1; + } + elsif(/^[ \t]*$/){ + } + else{ + $front = "$front.\\\" $_"; + } + } + + if($mode == 1){ + if(/(.*)<\/title>/){ + $front = "$front.\\\" This documentation was generated from the book titled \"$1\", which is part of the Linux kernel source.\n.\\\" \n"; + } + elsif(/<legalnotice>/){ + $front = "$front.\\\" This documentation comes with the following legal notice:\n.\\\" \n"; + $mode = 2; + } + + elsif(/<author>/){ + $front = "$front.\\\" Documentation by: "; + } + elsif(/<firstname>(.*)<\/firstname>/){ + $front = "$front$1 "; + } + elsif(/<surname>(.*)<\/surname>/){ + $front = "$front$1 "; + } + elsif(/<email>(.*)<\/email>/){ + $front = "$front($1)"; + } + elsif(/\/author>/){ + $front = "$front\n"; + } + + elsif(/<copyright>/){ + $front = "$front.\\\" Documentation copyright: "; + } + elsif(/<holder>(.*)<\/holder>/){ + $front = "$front$1 "; + } + elsif(/<year>(.*)<\/year>/){ + $front = "$front$1 "; + } + elsif(/\/copyright>/){ + $front = "$front\n"; + } + + elsif(/^[ \t]*$/ + || /<affiliation>/ + || /<\/affiliation>/ + || /<address>/ + || /<\/address>/ + || /<authorgroup>/ + || /<\/authorgroup>/ + || /<\/legalnotice>/ + || /<date>/ + || /<\/date>/ + || /<edition>/ + || /<\/edition>/){ + } + else{ + print "Unknown tag in manpage conversion: $_"; + } + } + + if(/.*BEGINFRONTTAG.*/){ + $mode = 1; + } + } + close INPUT; + + system("cd $ARGV[1]; docbook2man $filename.sgml; mv $filename.9 /tmp/$$.9\n"); + open GENERATED, "< /tmp/$$.9"; + open OUTPUT, "> $ARGV[1]/$filename.9"; + + print OUTPUT "$front"; + print OUTPUT ".\\\" For comments on the formatting of this manpage, please contact Michael Still <mikal\@stillhq.com>\n\n"; + while(<GENERATED>){ + print OUTPUT "$_"; + } + close OUTPUT; + close GENERATED; + + system("gzip -f $ARGV[1]/$filename.9\n"); + unlink("/tmp/$filename.9"); } } elsif($ARGV[0] eq "install"){ diff -Nur linux-2.6.0-test3-bk1/scripts/split-man linux-2.6.0-test3-bk1-terseman-001/scripts/split-man --- linux-2.6.0-test3-bk1/scripts/split-man 2003-08-12 14:35:41.000000000 +1000 +++ linux-2.6.0-test3-bk1-terseman-001/scripts/split-man 2003-08-13 10:24:16.000000000 +1000 @@ -35,7 +35,7 @@ $front = ""; while(<SGML>){ # Starting modes - if(/<legalnotice>/){ + if(/<bookinfo>/ || /<docinfo>/){ $mode = 1; } elsif(/<refentry>/){ @@ -49,16 +49,24 @@ $filename =~ s/typedef //; print "Found manpage for $filename\n"; - open REF, "> $ARGV[1]/$filename.sgml" or + open REF, "> $ARGV[1]/$filename.sgml" or die "Couldn't open output file \"$ARGV[1]/$filename.sgml\": $!\n"; - print REF "<!DOCTYPE refentry PUBLIC \"-//Davenport//DTD DocBook V3.0//EN\">\n\n"; - print REF "$refdata"; + print REF <<EOF; +<!DOCTYPE refentry PUBLIC "-//Davenport//DTD DocBook V3.0//EN"> + +<!-- BEGINFRONTTAG: The following is front matter for the parent book --> +$front +<!-- ENDFRONTTAG: End front matter --> + +$refdata +EOF $refdata = ""; } # Extraction if($mode == 1){ - $front = "$front$_"; + chomp $_; + $front = "$front<!-- $_ -->\n"; } elsif($mode == 2){ $refdata = "$refdata$_"; @@ -69,16 +77,8 @@ print REF "<manvolnum>9</manvolnum>\n"; } if(/<\/refentry>/){ - $front =~ s/<legalnotice>//; - $front =~ s/<\/legalnotice>//; print REF <<EOF; <refsect1><title>About this document -$front - -If you have comments on the formatting of this manpage, then please contact -Michael Still (mikal\@stillhq.com). - - This documentation was generated with kernel version $ARGV[2]. @@ -98,13 +98,13 @@ } # Ending modes - if(/<\/legalnotice>/){ + if(/<\/bookinfo>/ || /<\/docinfo>/){ $mode = 0; } elsif(/<\/refentry>/){ $mode = 0; close REF; - } + } } # And make sure we don't process this unnessesarily