#!/usr/bin/perl
# newfile -- another tricky tool for the KDevelop-Project (Prototyp)
# generate a new file from a template
# (c) 1998 Sandy Meier <smeier@rz.uni-potsdam.de>
# begin: 21 Jul 1998
# under the GPL


# syntax: newfile projectfile type filename
# projectfile -- complete project_filename with dir
# type of the new file = cpp,header,gnu,lsm,kdelnk,handbook_en
# newfile -- only the filename

#read the commandline and set some important stuff 
 
($projectfile,$type,$filename) = @ARGV;
$date = `date`;
$kdev_templatesdir = $ENV{"KDEDIR"} . "/share/apps/kdevelop/templates/";
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$year = $year + 1900;

#read the projectfile and extract the information

open (IN_PRJ,$projectfile);
@projectf = <IN_PRJ>;
$lenght = @projectf;

#interate the projectfile
for ($i=0;$i < $lenght;$i++){
    if ($projectf[$i] =~ /\#AUTHOR/){
	$author = $projectf[$i +1];
	chomp($author);
    }
    if ($projectf[$i] =~ /\#EMAIL/){
	$email = $projectf[$i +1];
	chomp($email);
    }
    if ($projectf[$i] =~ /\#PROJECT_NAME/){
	$project_name = $projectf[$i +1];
	chomp($project_name);
    }
    if ($projectf[$i] =~ /\#PROJECT_DIR/){
	$project_dir = $projectf[$i +1];
	chomp($project_dir);
    }
    if ($projectf[$i] =~ /\#PROJECT_SUB_DIR/){
	$project_sub_dir = $projectf[$i +1];
	chomp($project_sub_dir);
    }
    if ($projectf[$i] =~ /\#VERSION/){
	$version = $projectf[$i +1];
	chomp($version);
    }
}

if ($type eq "header"){
    gen_header();
}
if ($type eq "cpp"){
    gen_cpp();
}

if ($type eq "lsm"){
    gen_lsm();
}
if ($type eq "kdelnk"){
    gen_kdelnk();
}
if ($type eq "handbook_en"){
    gen_handbook_en();
}
if ($type eq "gnu"){
    gen_gnu();
}

exit;

sub gen_header {
#read the headerfile_template and generate the new header
    my $localheader = $project_sub_dir . "templates/header_template";
    if (-e $localheader){
	open (IN_HEADER,$localheader);
    }
    else {
	open (IN_HEADER,$kdev_templatesdir . "header_template");
    }
    @header = <IN_HEADER>;
    
    open (OUT_HEADER,">" . $project_sub_dir . $filename);
    foreach $i (@header){
	$i =~ s/FILENAME/$filename/;
	$i =~ s/YEAR/$year/;
	$i =~ s/DATE/$date/;
	$i =~ s/EMAIL/$email/;
	$i =~ s/AUTHOR/$author/;
	print OUT_HEADER $i;
    }   
}

sub gen_cpp {
#read the cpp_template and generate the new cppfile
    my $localcpp = $project_sub_dir . "templates/cpp_template";
    if (-e $localcpp){
	open (IN_HEADER,$cpp);
    }
    else {
	open (IN_HEADER,$kdev_templatesdir . "header_template");
    }
    open (IN_CPP,$kdev_templatesdir . "cpp_template");
    @cpp = <IN_CPP>;
    
    open (OUT_CPP,">" . $project_dir . $project_sub_dir . $filename);
    foreach $i (@cpp){
	$i =~ s/FILENAME/$filename/;
	$i =~ s/YEAR/$year/;
	$i =~ s/DATE/$date/;
	$i =~ s/EMAIL/$email/;
	$i =~ s/AUTHOR/$author/;
	print OUT_CPP $i;
    }   
}

sub gen_lsm {
#read the lsm_template and generate the new lsmfile
    open (IN_LSM,$kdev_templatesdir . "lsm_template");
    @lsm = <IN_LSM>;
    
    open (OUT_LSM,">" . $project_dir . $filename);
    foreach $i (@lsm){
	$i =~ s/PROJECT_NAME/$project_name/;
	$i =~ s/EMAIL/$email/;
	$i =~ s/AUTHOR/$author/;
	print OUT_LSM $i;
    }   
}


sub gen_kdelnk {
#read the kdelnk_template and generate the new kdelnkfile
    open (IN_KDELNK,$kdev_templatesdir . "kdelnk_template") || die "error";
    @kdelnk = <IN_KDELNK>;
    
    open (OUT_KDELNK,">" . $project_dir . $project_sub_dir . $filename) || die "error";
    foreach $i (@kdelnk){
	$project_name = "\L$project_name"; # make ist lowercase
	$i =~ s/PROJECT_NAME/$project_name/;
	print OUT_KDELNK $i;
    }   
}

sub gen_handbook_en {
    #read the handbook_en_template and generate the new handbookfile
    my $str =  $project_dir . $project_sub_dir . "docs/en/";
    `mkdirhier $str`;
    open (IN_HANDBOOK,$kdev_templatesdir . "handbook_en_template") || die "error";
    @handbook = <IN_HANDBOOK>;
    
    open (OUT_HANDBOOK,">" . $project_dir . $project_sub_dir . "docs/en/" .  $filename);
    foreach $i (@handbook){
	$i =~ s/PROJECT_NAME/$project_name/;
	$i =~ s/DATE/$date/;
	$i =~ s/VERSION/$version/;
	$i =~ s/EMAIL/$email/;
	$i =~ s/AUTHOR/$author/;
	print OUT_HANDBOOK $i;
    }   
}

sub gen_gnu {
    if ($filename eq "COPYING" || $filename eq "README" || $filename eq "ChangeLog" 
	|| $filename eq "INSTALL" || $filename eq "TODO"){
	my $str =  $kdev_templatesdir . $filename . "_template" . " " . $project_dir . $filename; 
	`cp $str`;
    }
    if ($filename eq "AUTHORS"){
	open (IN_AUTHORS,$kdev_templatesdir . "AUTHORS_template") || die "error";
	my @authors = <IN_AUTHORS>;
	
	open (OUT_AUTHORS,">" . $project_dir . "AUTHORS");
 	foreach $i (@authors){
	    $i =~ s/EMAIL/$email/;
	    $i =~ s/AUTHOR/$author/;
	    print OUT_AUTHORS $i;
	}   
    }
    
    
    
}
