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