File:  [LON-CAPA] / loncom / build / Attic / parse.pl
Revision 1.2: download - view: text, annotated - select for diffs
Thu Dec 7 20:34:12 2000 UTC (23 years, 5 months ago) by harris41
Branches: MAIN
CVS tags: HEAD
adding in whitespace to make code more readable

#!/usr/bin/perl

# Scott Harrison
# November 2000

# Read in loncapa tags and metagroup tags

# -------------------------------------------- Read in command line arguments
my ($file,$mode)=@ARGV;

# Read in master data file
open IN,"<$file";
my @lines=<IN>;
close IN;

my $info=join('',@lines);
my $info2=$info; # value to allow for meta data group retrieval

my %ihash; # big data storage object
while ($info=~/\<loncapa\s+(.*?)\>/isg) {
    my $keystring=$1;
    my %hash=map {my ($key,$value)=split(/\=(?!")|\=(?=\s*"[^"]*"[^"]*$)/);
                                   $value=~s/^"//;
 				   $value=~s/"$//;
                                   (uc($key),$value);}
             split(/\s+(?=\w+\s*\=)/,$keystring);
    if (uc($hash{'TYPE'}) eq "OWNERSHIP") {
        $info{$hash{'TYPE'}}{$hash{'CATEGORY'}}{'CHMOD'}=$hash{'CHMOD'};
        $info{$hash{'TYPE'}}{$hash{'CATEGORY'}}{'CHOWN'}=$hash{'CHOWN'};
    }
    elsif (uc($hash{'TYPE'}) eq "DEVOWNERSHIP") {
        $info{$hash{'TYPE'}}{$hash{'CATEGORY'}}{'CHMOD'}=$hash{'CHMOD'};
        $info{$hash{'TYPE'}}{$hash{'CATEGORY'}}{'CHOWN'}=$hash{'CHOWN'};
    }
    elsif (uc($hash{'TYPE'}) eq "RPM") {
        $hash{'VALUE'}=~s/\\n/\n/g;
        $info{$hash{'TYPE'}}{$hash{'NAME'}}=$hash{'VALUE'};
    }
    elsif (uc($hash{'TYPE'}) eq "DIRECTORY") {
        $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'CATEGORY'}=$hash{'CATEGORY'};
        $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'DESCRIPTION'}=$hash{'DESCRIPTION'} if $hash{'DESCRIPTION'};
    }
    elsif (uc($hash{'TYPE'}) eq "LOCATION") {
        $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'CATEGORY'}=$hash{'CATEGORY'};
        $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'SOURCE'}=$hash{'SOURCE'};
        # get surrounding metagroup information
        my $ckeystring=$keystring; $ckeystring=~s/(SOURCE\=\"[^"]*)\*/$1\\\*/g;
        $info2=~/.*\<(?:metagroup|metasupergroup)\>(.*?)\<loncapa\s+$ckeystring\>(.*?)\<\/(?:metagroup|metasupergroup)\>/is;
	my $data=$1.$2;
        my @meta=('description','build','dependencies','files','note');
        foreach my $m (@meta) {
	    if ($data=~/\<($m)\>(.*?)\<\/$m\>/sgi) {
		my ($key,$value)=($1,$2);
		$info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{$key}=$value;
		print "$key\n\n$value\n\n\n\n";
	    }
        }
    }
    else {
        warn("WARNING: this tag text will be ignored since it cannot be understood\n---> $keystring\n");
    }
}



FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>