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;
        }
-       [EMAIL PROTECTED];
+       return [EMAIL PROTECTED];
 } # }}}
 
-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;
        }
-       [EMAIL PROTECTED];
+       return [EMAIL PROTECTED];
 } # }}}
 
-sub cnot { # {{{
-       my @iapps;      # internal applications list
-       my $name;
-       @[EMAIL PROTECTED];
-       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;
        }
-       [EMAIL PROTECTED];
+       return [EMAIL PROTECTED];
 } # }}}
 # 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;
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to