File: make-js-interfaces.pl

package info (click to toggle)
cgiirc 0.5.9-3squeeze1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 896 kB
  • ctags: 443
  • sloc: perl: 9,125; ansic: 163; sh: 99; makefile: 43
file content (80 lines) | stat: -rw-r--r-- 2,031 bytes parent folder | download | duplicates (3)
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};
   }
}