1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
#!/usr/bin/perl
# CGI:IRC JavaScript Interface builder
# Copyright (C) 2002 David Leadbeater (http://contact.dgl.cx/)
# Licensed under the GPLv2
use Symbol;
use IO::Handle;
my(%fd, %current);
my @browsers = qw/ie mozilla konqueror opera7/;
@current{@browsers} = @browsers;
for(@browsers) {
$fd{$_} = Symbol::gensym;
open($fd{$_}, ">../$_.pm") or die "Out to ../$_.pm: $!";
#? $fd{$_}->autoflush(1);
}
open(IN, "main.pm");
my @in = <IN>; # don't use while - bug in perl?
close(IN);
parse_line($_) for @in;
close($fd{$_}) for @browsers;
sub parse_line {
$_ = $_[0];
if(/^\.\$?(\w+)(?: (.*))?/) {
# The $ is so the variables get syntax hilighted :)
my($cmd, $param) = ($1, $2);
my @params = split(' ', $param);
if($cmd eq 'include') {
open(INC, $param) or die "$param: $!";
parse_line($_) while <INC>;
close(INC);
}elsif($cmd eq 'sub') {
out_cur("sub $param {\n");
open(SUB, "$param.pm") or die "$param: $!";
parse_line($_) while <SUB>;
close(SUB);
out_cur("}\n");
}elsif($cmd eq 'just') {
for my $current (keys %current) {
$current{$current} = 0;
if(scalar(grep(/$current/, @params))) {
$current{$current} = 1;
}
}
}elsif($cmd eq 'not') {
for my $current (keys %current) {
$current{$current} = 1;
if(scalar(grep(/$current/, @params))) {
$current{$current} = 0;
}
}
}elsif($cmd eq 'end') {
@current{keys %current} = keys %current;
}elsif($cmd eq 'else') {
for(keys %current) {
$current{$_} = $current{$_} ? 0 : 1;
}
}else{
print "urm? $cmd isn't valid\n";
}
}else{
out_cur($_);
}
}
sub out_cur {
$_ = $_[0];
for my $b(keys %current) {
my $x = $_;
$x =~ s/\*\*BROWSER/$b/g;
my $fh = $fd{$b}; # cry :(
print $fh $x if $current{$b};
}
}
|