#!/bin/sh
#
# Author: Pekka Riikonen <priikone@silcnet.org>
#
# Copyright (C) GNU GPL 2001 - 2002 Pekka Riikonen
#
# SILC Toolkit Reference Manual documentation script.  This will automatically
# generate documentation from the source tree.  This will require the 
# robodoc compiled in util/robodoc and php utility installed in your system.
#
# This will tarverse the given directory and all subdirectories for the
# SILC style header files.  All header files starting with prefix `silc' 
# will be checked.  For example, silcpkcs.h.
#
# Usage: ./sildoc <type> <source directory> <destination directory> <robodoc>
#
# The <source directory> is the directory where this starts checking for
# the headers and will traverse all subdirectories.  The <destination
# directory> is the directory to where the documentation is generated.
#

# Arguments checking
if [ $# -lt "4" ]; then
  echo "Usage: ./silcdoc <type> <source directory> <destination directory/file> <robodoc>"
  echo "Supported types: HTML PS"
#  echo "Supported types: HTML, ASCII, LATEX or RTF"
  exit 1
fi

TYPE=$1
SRC=$2
DST=$3
ROBO=$4

# Get all headers in the source directory
headers=`find $SRC -name "silc*.h"`

#
# PS documentation (from LATEX)
#
if [ "$TYPE" = "PS" ]; then
  TYPE="LATEX"
  rm -rf /tmp/silcdoc.tex
  mkdir /tmp/silcdoc.tex
  cp $headers /tmp/silcdoc.tex

  path=`pwd`
  cd /tmp/silcdoc.tex

  # Generate cross reference files
  headers=`find . -name "silc*.h" |cut -d/  -f2 |cut -d.  -f1`
  touch silcdoc_xref
  for i in $headers
  do
    $ROBO $i.h $i.h.tex $TYPE INTERNAL GENXREF $i.h.xref
    echo $i.h.xref >>silcdoc_xref
  done

  # Generate the detailed documentation
  headers=`find . -name "silc*.h" |cut -d/  -f2 |cut -d.  -f1`
  for i in $headers
  do
    # remove internals
    rm -rf $i_i.h
    $ROBO $i.h $i.h.tex XREF silcdoc_xref $TYPE C SORT NOSOURCE SINGLEDOC
  done

  # Generate the index
  $ROBO silcdoc_xref toolkit_mi INDEX $TYPE TITLE "SILC Toolkit Reference Manual"

  # Generate the postscript
  latex toolkit_mi
  makeindex toolkit_mi
  latex toolkit_mi
  latex toolkit_mi
  dvips toolkit_mi.dvi -o $DST

  cd $path

  rm -rf /tmp/silcdoc.tex
  exit 0
fi

#
# ASCII documentation
#
#if [ "$TYPE" = "ASCII" ]; then
#
#fi

#
# HTML documentation
#
if [ "$TYPE" = "HTML" ]; then
  rm -rf /tmp/silcdoc.html
  rm -rf /tmp/silcdoc_html.html
  mkdir /tmp/silcdoc.html
  mkdir /tmp/silcdoc_html.html
  cp $headers /tmp/silcdoc.html

  # Generate index template from the DIRECTORY files. The template for
  # the generated index template is INDEX.tmpl.
  dfiles=`find $SRC -name "DIRECTORY"`
  for i in $dfiles
  do
    # Get library name
    name=`grep "@LIBRARY=" $i |cut -d=  -f2-`
    fname=`grep "@FILENAME=" $i |cut -d=  -f2`
    links=`grep "@LINK=" $i |cut -d=  -f2 |cut -d:  -f1`

    # Generate links to template file that can be included into various
    # places on the webpage.
    echo "<a href="$fname"><img src="box.gif" border="0" alt="">$name</a><br />" >>$DST/index.tmpl
    for k in $links
    do
      n=`grep $k $i |cut -d=  -f2 |cut -d:  -f2-`
      echo "<li><a href="$k">$n</a>" >>$DST/$fname.links
      echo "&nbsp;&nbsp;&nbsp; <a href="$k"><img src="box2.gif" border="0" alt="">$n</a><br />" >>$DST/index.tmpl
    done
  done
  # Now get the template for the link template, and generate the final index
  # template file
  temp=`find $SRC -name "INDEX.tmpl"`
  sed -e "/@BODY@/ r $DST/index.tmpl" -e s/@BODY@//g $temp >$DST/index.tmpl.tmp
  mv $DST/index.tmpl.tmp $DST/index.tmpl

  # Copy all HTML files to destination
  htmlfiles=`find $SRC -name "*.html"`
  for i in $htmlfiles
  do
    cp $i /tmp/silcdoc_html.html
  done
  path=`pwd`
  cd /tmp/silcdoc_html.html
  htmlfiles=`find . -name "*.html" | cut -d/  -f2`
  cd $path
  for i in $htmlfiles
  do
    # Generate the details and the layout
    f="/tmp/silcdoc_html.html/$i"
    sh gen.sh $DST gen_index.php 1 $f $f
    cp /tmp/silcdoc_html.html/$i $DST
  done

  # Generate cross reference files
  path=`pwd`
  cd /tmp/silcdoc.html
  headers=`find . -name "silc*.h" |cut -d/  -f2 |cut -d.  -f1`
  cd $path
  touch $DST/silcdoc_xref
  for i in $headers
  do
    $ROBO /tmp/silcdoc.html/$i.h $DST/$i.html $TYPE GENXREF $DST/$i.xref
    echo $DST/$i.xref >>$DST/silcdoc_xref
  done

  # Generate the actual detailed documentation
  path=`pwd`
  cd /tmp/silcdoc.html
  headers=`find . -name "silc*.h" |cut -d/  -f2 |cut -d.  -f1`
  cd $path
  for i in $headers
  do
    $ROBO /tmp/silcdoc.html/$i.h $DST/$i.html XREF $DST/silcdoc_xref $TYPE

    # Generate the TOC file
    sh gen.sh $DST gen_index.php 1 $DST/$i.html $DST/$i.html

    # Generate the details and the layout
    files=`find $DST -name ""$i"-*.html"`
    for k in $files
    do
      sh gen.sh $DST gen_index.php 0 "$k" "$k"
    done

    rm -f $DST/$i-index.tmpl
  done

  # Generate the index and TOC files from the DIRECTORY files
  for i in $dfiles
  do
    # Get library name
    name=`grep "@LIBRARY=" $i |cut -d=  -f2-`
    fname=`grep "@FILENAME=" $i |cut -d=  -f2`

    # Generate links for this library
    sed -e "/@LINKS@/ r $DST/$fname.links" -e s/@LINKS@//g $i >$DST/$fname

    # Generate the TOC file for the library
    sh gen.sh $DST gen_index.php 1 $DST/$fname $DST/$fname

    # Generate the link for the top index.html for this library
    echo "<li><a href="$fname">$name</a>" >>$DST/index.html.tmp
    rm -f $DST/$fname.links
  done

  # Generate the top index.html file
  index=`find $SRC -name "LIBINDEX"`
  version=`grep "define SILC_VERSION_STRING" $SRC/../includes/silcversion.h |cut -d\"  -f2`
  curdate=`date`
  sed -e "/@VERSION@/s//$version/" -e "/@DATE@/s//$curdate/" -e "/@BODY@/ r $DST/index.html.tmp" -e s/@BODY@//g $index >$DST/index.html
  sh gen.sh $DST gen_index.php 2 $DST/index.html $DST/index.html

  # Generate the index toolkit_index.html file
  $ROBO $DST/silcdoc_xref $DST/toolkit_index.html INDEX HTML TITLE "SILC Toolkit Index"
  sh gen.sh $DST gen_index.php 2 $DST/toolkit_index.html $DST/toolkit_index.html

  # Cleanup
  rm -rf $DST/index.html.tmp
  rm -rf /tmp/silcdoc.html
  rm -rf /tmp/silcdoc_html.html
  exit 0
fi
