#!/usr/bin/perl5
#
# doc-kr status page generation script
#
# $Id: make-status-page.pl,v 1.3 1999/01/09 08:55:47 cjh Exp cjh $
#
# CHOI Junho <cjh@kr.freebsd.org>, 99/1/6
#
# $Log: make-status-page.pl,v $
# Revision 1.3  1999/01/09 08:55:47  cjh
# show original revision
# show translated revision
# add link to download original file
# add link to download translated file
# add link to download diff file untranslated(showdiff.cgi added)
#
# Revision 1.2  1999/01/07 00:43:20  cjh
# add </td> at each end of <td>
#

# configuration
#
# location of translated sgml source files(entire dist.)
$transsgmlfiles="/kfug/www/htdocs/projects/doc-kr/docs/handbook/sgml-ko/*.sgml";
# location of translated sgml source(in the web)
$webtranssgmldir="docs/handbook/sgml-ko";

# directory of original source files(should be cvs checkout'ed)
$originalsgmlprefix="/kfug/www/htdocs/projects/doc-kr/docs";
# path of original source(CVS repository)
$originalsgmldir="handbook/sgml-en";
# path of original source(in the web)
$weboriginalsgmldir="docs/handbook/sgml-en";

# web location of showdiff.cgi
$cgidiff="http://www.kr.freebsd.org/projects/doc-kr/showdiff.cgi";

# where handbook located in the web
$webhandbook="/handbook";

# location of in-progress translating status file
$progressfile="/kfug/www/htdocs/projects/doc-kr/docs/progress-handbook.conf";
# command to get CVS status
$cvsstatuscmd="cvs -d /kfug/ncvs status";

# end of configuration

# main program body
use File::Basename;

@lst = glob $transsgmlfiles;
@olst = glob "$originalsgmlprefix/$originalsgmldir/*.sgml";

# status msg
$msg_complete="¹ø¿ª¿Ï·á";
$msg_none="¹Ì¹ø¿ª";
$msg_progress="¹ø¿ªÁß";

# hashed by sgml source: translated
%revisions=();
%translators=();
%status=();
%statusflag=();

# hashed by sgml path: original
%orevisions=();
%opathname=();

# hashed by kmembers.sgml
%transname=();
%transaddr=();

#print basename($lst[0],, ".sgml");

# get revision numbers: translated
foreach $source (sort(@lst))
{
  $basesrc=basename($source, ".sgml").".sgml";
  
  open SOURCE, $source;
  while(<SOURCE>){
    # revision
    if (/^<.*Original.*(\d+\.\d+)/){
       #print "$basesrc ==> $1\n";
       $revisions{$basesrc}=$1;
       $status{$basesrc}="$msg_complete";
       $statusflag{$basesrc}="COMPLETED";
    }
    # translator
    if (/(\&a\..*;).*¿ª/){
       #print "$basesrc ==> $1\n";
       $translators{$basesrc}=$1;
    }
   
    # get translator info
    if ($basesrc eq "kmembers.sgml"){
      if (/^<\!ENTITY\ (a\..*)\ \"(.*)/){
        #print "transname &$1; ==> $2\n";
	$entity="&$1;";
        $transname{$entity}=$2;
	$moreline=<SOURCE>;
	$moreline=~/url=\'mailto:(.*)\'/;
	#print "transaddr $entity ==> $1\n";
        $transaddr{$entity}=$1;

      }
    }
  }
  close SOURCE;
}

# get revision numbers: originals!
foreach $source (sort(@olst))
{
  $basesrc=basename($source, ".sgml").".sgml";

  open OSOURCE, "$cvsstatuscmd $source|";
  #print "$cvsstatuscmd $source|";

  $opathname{$basesrc}="$originalsgmldir/$basesrc";
  while(<OSOURCE>){
    # revision
    #if (/Repository.*(\d+\.\d+)/){
    if (/Working.*(\d+\.\d+)/){
       #print "Repos: $basesrc ==> $1<br>\n";
       $orevisions{$basesrc}=$1;
    }
  }
  close OSOURCE;
}


# checking progress status
open PROGRESS, $progressfile;
while(<PROGRESS>)
{
  # skip comments
  if (/^#/){
    next;
  }

  # progress reading
  if (/(.*\.sgml)\s+(&a\..*;)\s+(.*)/){
    #print "Prog: $1 ==> $2\n";
    $translators{$1}=$2;
    $status{$1}="$msg_progress $3";
    $statusflag{$1}="ING";
  }
}

# generate output

foreach $source (sort(@olst))
{
  $basesrc=basename($source, ".sgml").".sgml";
  $htmlname=basename($source, ".sgml").".shtml";

  # status
  if ($status{$basesrc} eq ""){
    $status{$basesrc}=$msg_none;
    $statusflag{$basesrc}="NONE";
  }

  # image
  if ($statusflag{$basesrc} eq "COMPLETED") {
    if ($revisions{$basesrc} eq $orevisions{$basesrc}) {
      $flagimg="/icons/text.gif";
    }
    else {
      $flagimg="/icons/p.gif";
    }
  }
  elsif ($statusflag{$basesrc} eq "ING") { $flagimg="/icons/quill.gif"; }
  else { $flagimg="/icons/generic.red.gif"; }
  print "<img src='$flagimg'> ";

  # filename
  print "<a href='$webhandbook/$htmlname'>$basesrc</a> ";

  # original version
  print "(";
  print "<a href=\"$weboriginalsgmldir/$basesrc\">$orevisions{$basesrc}</a>";
  
  # translated version
  if ($revisions{$basesrc} eq "") { print "/$status{$basesrc}"; }
  else {
    print "/<a href=\"$webtranssgmldir/$basesrc\">$revisions{$basesrc}</a>";
  }

  # diff
  if ($revisions{$basesrc} eq ""){
    print "";
  }elsif ($revisions{$basesrc} ne $orevisions{$basesrc}){
    print "/<a href=\"${cgidiff}?file=$basesrc&r1=$revisions{$basesrc}&r2=$orevisions{$basesrc}\">diff</a>";
  }
  print ") ";

  # owner
  if ($translators{$basesrc} ne "") {
    print "<font size='-1'>";
    print ", $transname{$translators{$basesrc}} ";
    print "<a href=\"mailto:$transaddr{$translators{$basesrc}}\">&lt;$transaddr{$translators{$basesrc}}&gt;</a>";
    print "</font>";
  }

  print "<br>\n";
}


