#!/usr/bin/perl
# Perl script for removing Java scripts from HTML files

$VERSION = '(C) eko@lanet.lv v.0.0.3. 2012.11.11./11:30';

sub paskaidro {
	print "\n" . '-' x 60;
	print "
#  Programma domāta <script> ...</script> ierakstu dzēšanai.
#  Iespējams uzdot meklēt failos dotajā direktorijā un apakšdirektorijās.
#  Tiek rakstīits tajos pat failos, kurus ielasa!
$0 [parametri] [fails1] [fails2] [...]
Parametri:
-J	neuzdot jautājumus
-R	meklē arī visās apakšdirektorijās
-V	izdrukā programmas versijas numuru
-pap=ARG1[,ARG2[,...]]	jāmeklēlē failos ar citu paplašinājumu
	";
	print '-' x 60 . "\n";
	exit;
}
### Autortiesības ###########################################################
# (C) 2012. eko@lanet.lv                        Visas tiesības rezervētas   #
#                                                                           #
# Šo programmu var kopēt, pārveidot un brīvi izplatīt                       #
# ievēerojot sekojošus noteikumus:                                          #
#   1) programmas tekstā noteikti jāsaglabā šis autortiesību                #
#      noteikumu apraksts;                                                  #
#   2) par šo programmas kodu nedrīkst iekasēt nekādu samaksu, atskaitot    #
#      atlīdzību par izdevumiem, kas saistiiti ar programmas izplatīšanu;   #
#   3) šo programmas tekstu nedrīkst iekļaut nekādā komerciālā              #
#      produktā.                                                            #
# Programmas pamatglabātuve:                                                #
# ftp://priede.bf.lu.lv/pub/RakstuDarbi/darba_riiki/teksta_nomaina/         #
#############################################################################

# NOKLUSĒTIE MANĪGIE ########################################################
#                                                                           #
#                                                                           #

# Kādus failus meklēt
@koMeklet = ('htm','html','shtml','asp');


#                                                                           #
# Iespēhjami secīgi vairāki meklējumi attiecīgi katru ierakstot             #
# ar savu numuru:                                                           #
# $nomaina{0}, $nomaina{1} u.t.t.                                           #
# Meklējamā teksta pareizrakstība atbilst RegEx.                            #
#                                                                           #

# Izdzēš visus skriptus
$nomaina{0}{'vecais'} =  '<script.*?script>';
$nomaina{0}{'jaunais'} =  '';
$nomaina{1}{'vecais'} =  '(<[^<]*)\b\w*=\"javascript[^\"]*\"';
$nomaina{1}{'jaunais'} =  '$1';
$nomaina{2}{'vecais'} =  '(<[^<]*)\bonclick=\"[^\"]*\"';
$nomaina{2}{'jaunais'} =  '$1';
$nomaina{3}{'vecais'} =  '(<[^<]*)\onmouseout=\"[^\"]*\"';
$nomaina{3}{'jaunais'} =  '$1';
$nomaina{4}{'vecais'} =  '(<[^<]*)\bonmouseover=\"[^\"]*\"';
$nomaina{4}{'jaunais'} =  '$1';
$nomaina{5}{'vecais'} =  '(<[^<]*)\bquerystr=\"[^\"]*\"';
$nomaina{5}{'jaunais'} =  '$1';
$nomaina{6}{'vecais'} =  '(<[^<]*)\bonload=\"[^\"]*\"';
$nomaina{6}{'jaunais'} =  '$1';

#                                                                           #
# MAINĪGO BEIGAS ############################################################

# Izpēta komandrindas parametrus
foreach (@ARGV){
	if ($_ eq '-R') {
		$visas_dir = 1 ;
	}
	elsif ($_ eq '-J') {
		$neko_nejautaat = 1 ;
	}
	elsif ($_ eq '-h' || $_ eq '-help'){
		&paskaidro;
	}
	elsif ($_ eq '-V'){
		print "$VERSION\n";
		exit
	}
	elsif (/^-pap=/){
		@koMeklet = split /,/, substr ($_,5);
	}
	else {
		push (@failu_saraksts, $_);
	}
}



# Apstrādāto failu skaitītājs
$apstraadaati_faili = 0;

# Pamatdirektorija ir skripta izzsaukšanas direktorija
$vieta = './';

if (!$neko_nejautaat && !@failu_saraksts) {
	# Paskaidrojošs teksts
	print "Paskaidrojums: $0 -h ";
	print "\nFaili tiks lasīti no direktorijas '$vieta'.\n";
	print "Tiks meklēts visās apakšdirektorijās.\n" if $visas_dir;
	print "Teksta nomaiņa notiks atrastajos failos!\n";
	print "Tiks meklēts failos: @koMeklet\n";
	print "Meklējamais teksts -> uz -> Jaunais teksts:\n\n";
	@atsauces = keys(%nomaina);
	foreach (@atsauces) {
	print "$nomaina{$_}{'vecais'} -> uz -> $nomaina{$_}{'jaunais'}\n";
	}
	print "\n\nVai turpināt? (J/N)\n\n";

	# Noskaidro, vai turpināt darbu
	while ($atbilde ne "J" && $atbilde ne "Y"){
		chomp ($atbilde = <STDIN>);
		$atbilde = uc($atbilde);
		if ($atbilde eq "N") {
			exit;
		}
	}
}

# Tālāk viss atkarīgs no datora atmiņas
if (@failu_saraksts) {
	foreach (@failu_saraksts) {
		&aizstaaj ($vieta, $_);
	}
}
else {
	&sameklee_failus($vieta);
}
print "\n\n Apstrādāto failu skaits: $apstraadaati_faili \n\n";

### Programmas beigas  ######################################################


### Apakšprogramma, kas izsauc pati sevi, līdz visas direktorijas izlasītas

# Staigā pa direktorijām un meklē failus
# Jāpārsūta ceļš, kāds tas ir attiecībā pret šo perl skriptu
sub sameklee_failus {
	my($direktorija) = @_;
	my(@failu_saraksts);
	print "Skatos $direktorija\n";
	if (!opendir(DIREKTORIJA_NR, $direktorija)) {
		print "Diemžēl neizdevās atvērt $direktorija\n";
		return;
	}
	@failu_saraksts = readdir(DIREKTORIJA_NR);
	close(DIREKTORIJA_NR);
	foreach (@failu_saraksts) {
		if (/^\./) {
			next;
		}	

		# Vai parasts fails
		if (-f $direktorija . $_){

			# Failus salīdzina ar atļautiem failu paplašinājumiem.
			# Netiks ņemti vērā lielie/mazie burti
			foreach $t_pap (@koMeklet) {
				if (/$t_pap$/i) {
					&aizstaaj ($direktorija, $_);
					last;
				}
			}
		}

		# Lai lieki negrabinātu disku, izmanto mainīgo _, ko saguva ar if salīdzinājumu
		# Pārbauda, vai dotajā direktorijā nav apakšdirektoriju
		elsif (-d _){
			if ($visas_dir) {
				$drk = $direktorija . $_ . "/";
				&sameklee_failus($drk);
			}
		}
	}
}

sub aizstaaj {
	my ($direktorija, $kuru) = @_;
	if (open FAILS, "<$direktorija$kuru") {
		my($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat(FAILS);
		read FAILS, $teksts, $size;
		close FAILS;

		# Atver failu, kur ierakstiit
		if (open(JAUNAIS, ">$direktorija$kuru")) {

			# Izdrukā uz ekrāna atrastā failu pilnu vārdu.
			# Šāda izdruka salēnina darbu, tādēļ atslēgta.
			# print "Ierakstu failaa $direktorija$_ \n";
			$apstraadaati_faili += 1;

			# Meklē un aizvieto uzdotos tekstus
			@apmainamie = keys %nomaina;
			$_ = $teksts;
			foreach $vards (@apmainamie){
				$vecais_teksts = $nomaina{$vards}{'vecais'};
				$jaunais_teksts = $nomaina{$vards}{'jaunais'};
				eval "s/$vecais_teksts/$jaunais_teksts/gims";
			}
			print JAUNAIS $_;
		}
		else {
			print "Nevar ierakstīt failā $direktorija$_ \n"; 
		}
	}
	else {
		print "Nevar atvērt failu $direktorija$_ \n"; 
	}
}
