chiark / gitweb /
htmlman now deals with getting filenames right. Also quietens an
[disorder] / scripts / htmlman
index c579151dcd9679dba61e6e4cabd5e34288d1f13e..9a09c78de8c2b01ae6365d13d9ee502bbb5a6977 100755 (executable)
@@ -1,51 +1,86 @@
 #! /bin/sh
 #
 # This file is part of DisOrder
-# Copyright (C) 2004, 2005 Richard Kettlewell
+# Copyright (C) 2004, 2005, 2007, 2008, 2010 Richard Kettlewell
 #
-# This program is free software; you can redistribute it and/or modify
+# This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-# USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
 set -e
 
-title=$(basename $1)
+stdhead=false
+extension="html"
+
+while test $# -gt 0; do
+  case "$1" in
+  -stdhead )
+    stdhead=true
+    ;;
+  -extension )
+    shift
+    extension=$1
+    ;;
+  -- )
+    shift
+    break
+    ;;
+  -* )
+    echo >&2 "ERROR: unknown option $1"
+    exit 1
+    ;;
+  * )
+    break
+    ;;
+  esac
+  shift
+done
 
-cat <<EOF
-<html>
- <head>
-@include{stdhead}@
-  <title>$title</title>
- </head>
- <body>
-@include{@label{menu}@}@
-EOF
-printf "   <pre class=manpage>"
-# this is kind of painful using only BREs
-nroff -man "$1" | sed 's/&/\&amp;/g;
-                       s/</\&lt;/g;
-                       s/>/\&gt;/g;
-                       s/@/\&#64;/g;
-                       s!\(.\)\b\1!<b>\1</b>!g;
-                       s!\(&[#0-9a-z][0-9a-z]*;\)\b\1!<b>\1</b>!g;
-                       s!_\b\(.\)!<i>\1</i>!g;
-                       s!_\b\(&[#0-9a-z][0-9a-z]*;\)!<i>\1</i>!g;
-                       s!</\([bi]\)><\1>!!g'
-cat <<EOF
-</pre>
-@include{@label{menu}@end}@
- </body>
-</html>
-EOF
+for page; do
+  title=$(basename $page)
+  output=$page.$extension
+  echo "$page -> $output" >&2
+  exec > $output.new
+  echo "<html>"
+  echo " <head>"
+  if $stdhead; then
+    echo "@quiethead@#"
+  fi
+  echo "  <title>$title</title>"
+  echo " </head>"
+  echo " <body>"
+  if $stdhead; then
+    echo "@stdmenu{}@#"
+  fi
+  printf "   <pre class=manpage>"
+  # this is kind of painful using only BREs
+  nroff -Tascii -man "$page" | ${GNUSED} \
+                        '1d;$d;
+                         1,/./{/^$/d};
+                         s/&/\&amp;/g;
+                         s/</\&lt;/g;
+                         s/>/\&gt;/g;
+                         s/@/\&#64;/g;
+                         s!\(.\)\b\1!<b>\1</b>!g;
+                         s!\(&[#0-9a-z][0-9a-z]*;\)\b\1!<b>\1</b>!g;
+                         s!_\b\(.\)!<i>\1</i>!g;
+                         s!_\b\(&[#0-9a-z][0-9a-z]*;\)!<i>\1</i>!g;
+                         s!</\([bi]\)><\1>!!g'
+  echo "</pre>"
+  if $stdhead; then
+    echo "@credits"
+  fi
+  echo " </body>"
+  echo "</html>"
+  mv $output.new $output
+done