#!/usr/bin/perl -w use warnings; print "Make ConTeXt project -- 2002-05-17\n"; print "copyleft 2002 Henning Hraban Ramm\n\n"; @Level = ("environment","project", "product","component"); @Prefix = ("env_", "project_","prd_", "c_"); # file prefixes $Suffix = ".tex"; # ending $IniSuffix = ".ini"; # ending for defaults files $Command = $ARGV[0]; if (!$Command) {$Command=".";} $validCommand = 0; $ProjectPath = "."; # default path = actual path if ($Command =~ m/^--/) { # if first parameter starts with -- $Command =~ s/^--//; # delete -- ($Command eq "help") && help(); # show help, if wanted if ($Command =~ m/[0-3]/) { $Command = $Level[$Command]; } # if --0 etc. for ($count=@Level-1; $count>0; $count--) { # iterate all levels if ($Command eq $Level[$count]) { # if command matches level unless ($ARGV[1]) { # if no second command line parameter my $missname = $Level[$count-1]; if ($missname eq $Level[0]) { $missname = $Level[1]; } help("$missname name is missing!"); } # if no second parameter if (($count>1) and (!$ARGV[2])) { # with level 2 we need 2 parameters help($Level[$count]." name is missing!"); } # if no third parameter $validCommand=1; # ok, print no help print "making ".$Level[$count]."...\n"; MakeFile($count, $ARGV[1], $ARGV[2]); } # if } # for ($Command eq "all") && help("option --all is not yet implemented.\n"); ($validCommand) && exit(0); # exit without error } # if --parameter help("Don't know what to do!"); # help function ends with exit ### END ### sub MakeFile { # gets level number and two other args (project/product or product/component) ### my $ActLev = $_[0]; my $ProjectName=$_[1]; my $ProductName=$_[2]; my $InKey=""; my $ProjectLine=""; if ($ProjectName =~ m/^.*[\/\\:]/) { # look for folder delimiters $ProjectName = $'; # ' chop($ProjectPath = $&); $ProjectPath =~ tr§\:\/\\§/§; # change all delimiters to UNIX slashes } # if if (ProductName =~ m/^.*[\/\\:]/) { # delete other path $ProductName = $'; # ' } if (!$ProductName) { $ProductName=$ProjectName; } unless (-d $ProjectPath) { # test path (-f $ProjectPath) && die "$ProjectPath is a file!\n"; print("making $ProjectPath..."); mkdir($ProjectPath) or die "Cannot make dir $ProjectPath: $!"; } # if no path $FileName = $ProjectPath."/".$Prefix[$ActLev].$ProductName.$Suffix; (-d $FileName) && die "$FileName is a directory!\n"; # Insert entry in next level file ($ActLev == 1) && MakeFile(0,$ProjectPath."/".$ProjectName,$ProductName); # project makes environment if ($ActLev > 1) { # insert product and component into next level my @FileList = (); my $Count = 0; $ProjectFileName = $ProjectPath."/".$Prefix[$ActLev-1].$ProjectName.$Suffix; print "Inserting ".$Prefix[$ActLev].$ProductName." into ".$Level[$ActLev-1]." ".$ProjectFileName."...\n"; open (myFILE, $ProjectFileName) or warn "Cannot open $ProjectFileName: $!"; while () { $FileList[$Count] = $_; if (($ActLev==3) && (m/\\project/)) { # if component $ProjectLine = $_; } # if component and project line in product file if (m/\\stop$Level[$ActLev-1]/) { $StopPos = $Count; } if (m/$Prefix[$ActLev]$ProductName/) { $Exist = 1; print "Entry exists already.\n"; } $Count++; } # while myFILE close (myFILE); if (!$Exist) { open (myFILE, ">".$ProjectFileName) or warn "Cannot open $ProjectFileName: $!"; for ($Count=0; $Count < @FileList; $Count++) { if ($Count == $StopPos) { print myFILE "\t\\".$Level[$ActLev]." ".$Prefix[$ActLev].$ProductName."\n"; } # if StopPos print myFILE $FileList[$Count]; } # for close (myFILE); } } # insert product and component into next level # Make this level file if (-f $FileName) { print "$FileName exists. May I overwrite it? (YJ/N, Return)\n"; while ($InKey !~ m/[JYN]/i) { $InKey= ""; print "?"; $InKey = getc; } # while } # if file exists $IniFile = $Level[$ActLev].$IniSuffix; # defaults for every level if ($InKey !~ m/N/i) { print "Making $FileName...\n"; open (myFILE, ">".$FileName) or die "Cannot make $FileName: $!"; ($ActLev == 1) && print myFILE "% output=pdf interface=en\n"; print myFILE "\\start".$Level[$ActLev]." ".$Prefix[$ActLev].$ProductName."\n"; if (!$ActLev) { $tempLev=1; } else { $tempLev=$ActLev-1; } print myFILE "\\$Level[$tempLev] ".$Prefix[$tempLev].$ProjectName."\n"; ($ProjectLine) && print myFILE $ProjectLine; print myFILE "\n"; if ($ActLev==1) { print myFILE "% \\showlayout\n"; print myFILE "% \\showgrid\n"; print myFILE "% \\showbodyfontenvironment\n"; } # if project if (-T $IniFile) { # look for .ini file in script dir open (iniFILE, $IniFile) or warn "Cannot open $IniFile: $!"; print "inserting $IniFile into $FileName...\n"; while () { print myFILE;} # while close (iniFILE) or warn "Cannot close $IniFile: $!"; } $IniFile = $ProjectPath."/".$IniFile; if ((-T $IniFile) && ($ProjectPath ne ".")) { # look for .ini file in project dir open (iniFILE, $IniFile) or warn "Cannot open $IniFile: $!"; print "inserting $IniFile into $FileName...\n"; while () { print myFILE;} # while close (iniFILE) or warn "Cannot close $IniFile: $!"; } print myFILE "\n"; print myFILE "\\stop$Level[$ActLev]\n"; print myFILE "\n"; close (myFILE) or die "Cannot close $FileName: $!"; } # if InKey not N } # sub MakeFile ### sub help { ### ($_[0]) && print "ERROR: $_[0]\n\n"; print "Syntax: makeproject --help\n"; print " will give this help\n"; print "......: makeproject --project \n"; print " will make $Prefix[1]$Suffix and $Prefix[0]$Suffix\n"; print "......: makeproject --product \n"; print " will make $Prefix[2]$Suffix and add it to $Prefix[1]$Suffix\n"; print "......: makeproject --component \n"; print " will make $Prefix[3]$Suffix and add it to $Prefix[2]$Suffix\n"; # print "......: makeproject --all \n"; # print " will make all of the files, asks after names\n"; print "Path should be only in first name!\n"; exit(1); } # sub help