SVN: vfmg/trunk/vfmg

sparky sparky at pld-linux.org
Fri Jan 19 21:40:40 CET 2007


Author: sparky
Date: Fri Jan 19 21:40:40 2007
New Revision: 8182

Modified:
   vfmg/trunk/vfmg
Log:
- simplify category logic (cand, cor, cnot)


Modified: vfmg/trunk/vfmg
==============================================================================
--- vfmg/trunk/vfmg	(original)
+++ vfmg/trunk/vfmg	Fri Jan 19 21:40:40 2007
@@ -462,158 +462,142 @@
 	die "Last error: $!\n";
 }
 
-sub gettag {
-	$file=~s/.*?<(.*?)>\s*//;
-	$1;
+sub gettag() {
+	$file =~ s/.*?<(.*?)>\s*//;
+	return $1;
 }
 
-sub getname {
-	$file=~s/\s*(.*?)\s*</</;
-	$1;
+sub getname() {
+	$file =~ s/\s*(.*?)\s*</</;
+	return $1;
 }
 
 our @menu; # $menu[parent]{dir number} = (menu number);
 my $desknum = $#desktop;
 
 # logic {{{
-sub cand { # {{{
+sub cand();
+sub cor();
+sub cnot();
+sub ctag($) {
+	my $tag = shift;
+	if( $tag eq 'Or' ) {
+		return cor();
+	} elsif( $tag eq 'And' ) {
+		return cand();
+	} elsif( $tag eq 'Not' ) {
+		return cnot();
+	} else {
+		return undef;
+	}
+}
+
+sub cand() { # {{{
 	my @iapps;	# internal applications list
-	my $name;
-	my $firstrun=1;
-	while ( (my $tag = gettag()) ne '/And') {
-		if($tag eq 'Category') {
-			my $dir=getname();
-			if($firstrun) {
-				foreach $name(0..$desknum) {
-					$iapps[$name]=$apps[$name] if exists $apps[$name]{$dir};
+	my $firstrun = 1;
+	while ( (my $tag = gettag()) ne '/And' ) {
+		if( $tag eq 'Category' ) {
+			my $dir = getname();
+			if( $firstrun ) {
+				foreach my $name (0 .. $desknum) {
+					$iapps[$name] = $apps[$name] if exists $apps[$name]{$dir};
 				}
-				$firstrun=0;
+				$firstrun = 0;
 			} else {
-				foreach $name(0..$#iapps) {
-					delete($iapps[$name]) unless exists $iapps[$name]{$dir};
+				foreach my $name (0 .. $#iapps) {
+					delete $iapps[$name] unless exists $iapps[$name]{$dir};
 				}
 			}
 			gettag();	# must be </category> else GIGO and we don't care
 			next;
 		}
-		if($tag=~/^(And|Or|Not)$/) {
-			my $tmpapps;
-			if ($tag eq 'Or') {
-				$tmpapps=cor();
-			} elsif ($tag eq 'And') {
-				$tmpapps=cand();
-			} else {
-				$tmpapps=cnot();
-			}
-			if($firstrun) {
-				foreach $name(0..$#$tmpapps) {
-					$iapps[$name]=$apps[$name] if defined $tmpapps->[$name];
+		my $tmpapps = ctag($tag);
+		if( $tmpapps ) {
+			if( $firstrun ) {
+				foreach my $name(0..$#$tmpapps) {
+					$iapps[$name] = $apps[$name] if defined $tmpapps->[$name];
 				}
-				$firstrun=0;
+				$firstrun = 0;
 			} else {
-				foreach $name(0..$#iapps) {
-					delete($iapps[$name]) unless defined $tmpapps->[$name];
+				foreach my $name(0..$#iapps) {
+					delete $iapps[$name] unless defined $tmpapps->[$name];
 				}
 			}
 			next;
 		}
 		warn "warning: possible XDG file corruption!: $tag\n" if $o_verbose;
 	}
-	\@iapps;
+	return \@iapps;
 } # }}}
 
-sub cor { # {{{
+sub cor() { # {{{
 	my @iapps;	# internal applications list
-	my $name;
-	while ( (my $tag = gettag()) ne '/Or') {
-		if($tag eq 'Category') {
-			my $dir=getname();
-			foreach $name(0..$desknum) {
-				$iapps[$name]=1 if exists $apps[$name]{$dir};
+	while ( (my $tag = gettag()) ne '/Or' ) {
+		if( $tag eq 'Category' ) {
+			my $dir = getname();
+			foreach my $name (0 .. $desknum) {
+				$iapps[$name] = 1 if exists $apps[$name]{$dir};
 			}
 			gettag();	# must be </category> else GIGO and we don't care
 			next;
 		}
-		if($tag=~/^(And|Or|Not)$/) {
-			my $tmpapps;
-			if ($tag eq 'Or') {
-				$tmpapps=cor();
-			} elsif ($tag eq 'And') {
-				$tmpapps=cand();
-			} else {
-				$tmpapps=cnot();
-			}
-			foreach $name(0..$#$tmpapps) {
-				$iapps[$name]=1 if defined $tmpapps->[$name];
+		my $tmpapps = ctag($tag);
+		if( $tmpapps ) {
+			foreach my $name (0 .. $#$tmpapps) {
+				$iapps[$name] = 1 if defined $tmpapps->[$name];
 			}
 			next;
 		}
 		warn "warning: possible XDG file corruption!: $tag\n" if $o_verbose;
 	}
-	\@iapps;
+	return \@iapps;
 } # }}}
 
-sub cnot { # {{{
-	my @iapps;	# internal applications list
-	my $name;
-	@iapps=@apps;
-	while ( (my $tag = gettag()) ne '/Not') {
-		if($tag eq 'Category') {
-			my $dir=getname();
-			foreach $name(0..$#iapps) {
-				delete($iapps[$name]) if exists $iapps[$name]{$dir};
+sub cnot() { # {{{
+	my @iapps = @apps;	# internal applications list
+	while ( (my $tag = gettag()) ne '/Not' ) {
+		if( $tag eq 'Category' ) {
+			my $dir = getname();
+			foreach my $name (0 .. $#iapps) {
+				delete $iapps[$name] if exists $iapps[$name]{$dir};
 			}
 			gettag();	# must be </category> else GIGO and we don't care
 			next;
 		}
-		if($tag=~/^(And|Or|Not)$/) {	# I think it doesn't make any sense
+		my $tmpapps = ctag($tag);
+		if( $tmpapps ) { # I think it doesn't make any sense
 			warn "How did you get here!?\n" if $o_verbose;
-			my $tmpapps;
-			if ($tag eq 'Or') {
-				$tmpapps=cor();
-			} elsif ($tag eq 'And') {
-				$tmpapps=cand();
-			} else {
-				$tmpapps=cnot();
-			}
-			foreach $name(0..$#iapps) {
-				delete($iapps[$name]) if defined $tmpapps->[$name];
+			foreach my $name (0 .. $#iapps) {
+				delete $iapps[$name] if defined $tmpapps->[$name];
 			}
 			next;
 		}
 		warn "warning: possible XDG file corruption!: $tag\n" if $o_verbose;
 	}
-	\@iapps;
+	return \@iapps;
 } # }}}
 # logic }}}
 
 # parse menu file {{{
-my @tmp=grep -d, map {"$_/desktop-directories/"} @xdg_data_dirs;
+my @tmp = grep -d, map {"$_/desktop-directories/"} @xdg_data_dirs;
 sub include($) { # {{{
 	my ($mno) = @_;
 	while ( (my $tag = gettag()) ne "/Include" ) {
-		if($tag eq 'Category') {
-			my $dir=getname();
-			foreach my $name(0..$desknum) {
-				$menu[$mno]{$name}=-1
+		if( $tag eq 'Category' ) {
+			my $dir = getname();
+			foreach my $name (0 .. $desknum) {
+				$menu[$mno]{$name} = -1
 					if exists $apps[$name]{$dir};
 			}
 			gettag();	# must be </category> else GIGO and we don't care
 			next;
 		}
-		if($tag=~/^(And|Or|Not)$/) {
-			my $tmpapps;
-			if ($tag eq 'Or') {
-				$tmpapps=cor();
-			} elsif ($tag eq 'And') {
-				$tmpapps=cand();
-			} else {
-				$tmpapps=cnot();
-			}
-			foreach my $name(0..$#$tmpapps) {
+		my $tmpapps = ctag($tag);
+		if( $tmpapps ) {
+			foreach my $name (0 .. $#$tmpapps) {
 				next unless defined $tmpapps->[$name];
 				foreach my $dir (keys %{$apps[$name]}) {
-					$menu[$mno]{$name}=-1;
+					$menu[$mno]{$name} = -1;
 				}
 			}
 			next;


More information about the pld-cvs-commit mailing list