#!/usr/bin/perl
#*
#*******************************************************************************
#*   Copyright (C) 2006-2010, International Business Machines
#*   Corporation and others.  All Rights Reserved.
#*******************************************************************************
#*
#*   file name:  genheaders.pl
#*   encoding:   US-ASCII
#*   tab size:   8 (not used)
#*   indentation:4
#*
#*   Created by: Ram Viswanadha
#*
#*  This tool filters the deprecated.html and friends file generated by Doxygen and generates udarft.h
#*  udeprctd.h and uobslete.h
#*

use File::Find;
use File::Basename;
use IO::File;
use Cwd;
use File::Copy;
use Getopt::Long;
use File::Path;
use File::Copy;

$draftHeaderName = "udraft.h";
$draftAppend = "DRAFT_API_DO_NOT_USE";
$draftDefine = "U_HIDE_DRAFT_API";

$deprecatedHeaderName = "udeprctd.h";
$deprecatedAppend = "DEPRECATED_API_DO_NOT_USE";
$deprecatedDefine = "U_HIDE_DEPRECATED_API";

$obsoleteHeaderName = "uobslete.h";
$obsoleteAppend = "OBSOLETE_API_DO_NOT_USE";
$obsoleteDefine = "U_HIDE_OBSOLETE_API";

$systemHeaderName = "usystem.h";
$systemAppend = "SYSTEM_API_DO_NOT_USE";
$systemDefine = "U_HIDE_SYSTEM_API";

$internalHeaderName = "uintrnal.h";
$internalAppend = "INTERNAL_API_DO_NOT_USE";
$internalDefine = "U_HIDE_INTERNAL_API";

$versionAppend="";

#run the program
main();

#---------------------------------------------------------------------
# The main program

sub main(){
  GetOptions(
           "--srcdir=s" => \$srcDir,
           "--destdir=s" => \$destDir,
           "--version=s"  => \$version,
           "--exclusion-list=s"  => \$exclude,
           "--include-types" => \$includeTypes,
           "--verbose" => \$verbose
           );
  usage() unless defined $srcDir;
  usage() unless defined $destDir;
  usage() unless defined $version;
  usage() unless defined $exclude;
  $draftFile      = "$srcDir/draft.html";
  $deprecatedFile = "$srcDir/deprecated.html";
  $obsoleteFile   = "$srcDir/obsolete.html";
  $systemFile     = "$srcDir/system.html";
  $internalFile   = "$srcDir/internal.html";
  
  $versionAppend = $version;
  $versionAppend=~ s/^([0-9]+)\.([0-9]+).*/\1_\2/;
  $excludeFH = IO::File->new($exclude,"r")
            or die  "could not open the file $exclude for reading: $! \n";
  my %exclude;
  while (defined ($line = <$excludeFH>)){
    next if( $line =~ /^#/);
    $line =~ s/^\s+//;
    $line =~ s/\s+\n$//;
    $exclude{$line}="EXCLUDE";
  }    

  writeFile($draftFile, $draftHeaderName, $destDir, $draftAppend, $draftDefine, \%exclude);
  writeFile($deprecatedFile, $deprecatedHeaderName, $destDir, $deprecatedAppend, $deprecatedDefine, \%exclude);
  writeFile($obsoleteFile, $obsoleteHeaderName, $destDir, $obsoleteAppend, $obsoleteDefine, \%exclude);
  writeFile($systemFile, $systemHeaderName, $destDir, $systemAppend, $systemDefine, \%exclude);
  writeFile($internalFile, $internalHeaderName, $destDir, $internalAppend, $internalDefine, \%exclude);
}

#-----------------------------------------------------------------------
sub getHeaderDef{
    ($headerName) = @_;
    $headerDef = uc($headerName);  # this is building the constant for #define
    $headerDef =~ s/\./_/;
    return $headerDef;
}

#-----------------------------------------------------------------------
sub writeFile{
  ($infile,$outfile,$destDir, $symbolAppend, $symbolDef, $exclude) = @_;

  my $outFileName = $outfile;
  $headerDef = getHeaderDef($outfile);
  
  $outfile = $destDir."/".$outfile;

  $inFH = IO::File->new($infile,"r")
            or die  "could not open the file $infile for reading: $! \n";
  $outFH = IO::File->new($outfile,"w")
            or die  "could not open the file $outfile for writing: $! \n";

  #print "$headerDef>>> $outfile\n";
  printHeader($outFH, $outFileName, $headerDef, $symbolDef);
  parseWriteFile($inFH, $outFH, $symbolAppend, $exclude);
  printFooter($outFH, $headerDef, $symbolDef);
  close($inFH);
  close($outFH);
}

#-----------------------------------------------------------------------
sub printHeader{
    ($outFH, $headername, $HEADERDEF, $symbolDef) = @_;
    ($DAY, $MONTH, $YEAR) = (localtime)[3,4,5];
    $YEAR += 1900;
#We will print our copyright here + warnings
print $outFH <<END_HEADER_COMMENT;
/*
*******************************************************************************
*   Copyright (C) 2004-$YEAR, International Business Machines
*   Corporation and others.  All Rights Reserved.
*******************************************************************************
*
*   file name:  $headername
*   encoding:   US-ASCII
*   tab size:   8 (not used)
*   indentation:4
*
*   Created by: genheaders.pl, a perl script written by Ram Viswanadha
*
*  Contains data for commenting out APIs.
*  Gets included by umachine.h
*
*  THIS FILE IS MACHINE-GENERATED, DON'T PLAY WITH IT IF YOU DON'T KNOW WHAT
*  YOU ARE DOING, OTHERWISE VERY BAD THINGS WILL HAPPEN!
*/

#ifndef $HEADERDEF
#define $HEADERDEF

#ifdef $symbolDef

END_HEADER_COMMENT
}

#-----------------------------------------------------------------------
sub parseWriteFile{
    ($inFH, $outFH, $symbolAppend, $exclude) = @_;
    %disableRenaming;
    %enableRenaning;
    while (defined ($line = <$inFH>)){
          #just process C APIs for now
        if($line =~ /\<dt\>/ ){
            #special cases
            if( ($line =~ /LEUnicode/)|| ($line =~ /LanguageCodes/) ||
                ($line =~ /ScriptCodes/) || ($line =~ /\:+/) || 
                ($line =~ /Class/) ){
                next;
            }
            if( $line =~ /^\<dt\>File [^\>]*\>([^\<]*)/ ) {
                print "Skipping file-scope $symbolAppend $1\n";
                next;
            }
            #<dt>Global <a class="el" href="utrans_8h.html#a21">utrans_unregister</a>  </dt>
            #<dt>Global <a class="el" href="classUnicodeString.html#w1w0">UnicodeString::kInvariant</a>  </dt>
            # the below regular expression works for both the above formats.
            $line=~ m/\<dt\>.*\<a class=\".*\" href=\".*\">(.*)\<\/dt\>/;
            my $value = $1;
            $value =~ s/\<\/a\>\s*//g;
            $value =~ s/^\s+//;
            $value =~ s/\s+$//;
            #print "$exclude->{$value}\n";
            if($exclude->{$value} eq "EXCLUDE"){
                #print "$value  $exclude->{$value}\n";
                next;
            }
            print  "$value $realSymbol $nonExSymbol :: $line\n" if defined $verbose;
            next if(isStringAcceptable($value)==1);
            if($value =~ /^operator[^a-zA-Z]/) {
                print "Skipping operator $symbolAppend $value from $line\n";
                next;
            }
            $realSymbol = $value."_".$versionAppend;
            $nonExSymbol = $value."_".$symbolAppend;
            $disableRenaming{$value} = $nonExSymbol;
            $enableRenaming{$realSymbol} = $nonExSymbol;
            print  "$value $realSymbol $nonExSymbol\n" if defined $verbose;
            
        }
    }
    print "size of disableRenaming:  " . keys( %disableRenaming) . ".\n";
    print "size of enableRenaming:  " . keys( %enableRenaming) . ".\n";
    print $outFH "#    if U_DISABLE_RENAMING\n";
    foreach $key (sort (keys(%disableRenaming))) {
       print $outFH "#        define $key $disableRenaming{$key}\n";
       delete($disableRenaming{$key});
    }
    print $outFH "#    else\n";
    foreach $key (sort (keys(%enableRenaming))) {
       print $outFH "#        define $key $enableRenaming{$key}\n";
       delete($enableRenaming{$key});
    }
    print $outFH "#    endif /* U_DISABLE_RENAMING */\n";
}
#-----------------------------------------------------------------------
sub isStringAcceptable{
    ($string) = @_;
    @str = split(//, $string);
    $ret = 1;
    foreach  $val (@str){
        if(($val ne "_") && !($val =~ /[0-9A-Z]/)){
        #print "$val\n";
            $ret = 0;
        }
    }
    #print "$string : $ret\n";
    if(!(defined $includeTypes)){
        if($ret==0 && $str[0] eq 'U'){
            $ret=1;
        }
    }
    return $ret;
}

#-----------------------------------------------------------------------
sub printFooter{

      ($outFH, $headerDef, $symbolDef ) = @_;
#print the footer
print $outFH <<END_FOOTER;

#endif /* $symbolDef */
#endif /* $headerDef */

END_FOOTER
}
#-----------------------------------------------------------------------
sub usage {
    print << "END";
Usage:
gendraft.pl
Options:
        --srcdir=<directory>
        --destdir=<directory>
        --version=<current version of ICU>
        --exclusion-list=<file name>
        --include-types
e.g.: genheaders.pl  --srcdir=<icu>/source/common/docs/html --destdir=<icu>/source/common/unicode --version=2.8 --exclusion-list=exclude.txt
END
  exit(0);
}
