Added all the new documentation files.
[jquery.git] / docs / gen.pl
1 #!/usr/bin/perl
2
3 use Data::Dumper;
4
5 $Data::Dumper::Pair = ": ";
6 $Data::Dumper::Sortkeys = 1;
7 $Data::Dumper::Terse = 1;
8
9 open( F, $ARGV[0] || "../jquery-svn.js" );
10 my $f = join('', <F>);
11 close( F );
12
13 my @c;
14
15 while ( $f =~ /\/\*\*\s*(.*?)\s*\*\//gs ) {
16   my $c = $1;
17   $c =~ s/^\s*\* ?//mg;
18   $c .= "!!!";
19   my %ret;
20
21   $ret{ 'params' } = [];
22   $ret{ 'examples' } = [];
23
24   #while ( $c =~ s/^\@(\S+)\s*<pre>(.*?)<\/pre>\n//ms ) {
25     #print "PARAM '$1' '$2'\n";
26   #}
27   while ( $c =~ s/^\@(\S+) *(.*?)(?=\n\@|!!!)//ms ) {
28     my $n = $1;
29     my $v = $2;
30     $v =~ s/\s*$//g;
31     $v =~ s/^\s*//g;
32     $v =~ s/&/&amp;/g;
33     $v =~ s/(\s\s+)/"&nbsp;" x length($1)/eg;
34     $v =~ s/</&lt;/g;
35     $v =~ s/>/&gt;/g;
36     $v =~ s/\n/<br>/g;
37     $v = 1 if ( $v eq '' );
38
39     if ( $n eq 'param' ) {
40       my ( $type, $name, @v ) = split( /\s+/, $v );
41       $v = { "type" => $type, "name" => $name, "desc" => join(' ', @v) };
42       $n = "params";
43     } elsif ( $n eq 'example' ) {
44       $v = { "code" => $v };
45       $n = "examples";
46     }
47
48     if ( $n eq 'desc' || $n eq 'before' || $n eq 'after' || $n eq 'result' ) {
49       my @e = @{$ret{'examples'}};
50       $e[ $#e ]{ $n } = $v;
51     } else {
52
53       if ( exists $ret{ $n } ) {
54         if ( ref $ret{ $n } eq 'ARRAY' ) {
55           push( @{$ret{ $n }}, $v );
56         } else {
57           $ret{ $n } = [ $ret{ $n }, $v ];
58         }
59       } else {
60         $ret{ $n } = $v;
61       }
62
63     }
64   }
65   
66   $c =~ s/\s*!!!$//;
67   $c =~ s/\n\n/<br><br>/g;
68   $c =~ s/\n/ /g;
69   
70   $ret{ 'desc' } = $c;
71
72   if ( $c =~ /^(.*?(\.|$))/s ) {
73     $ret{ 'short' } = $1;
74     #$ret{ 'short' } =~ s/<br>/ /g;
75   }
76
77   #print "###\n" . $c . "\n###\n";
78
79   if ( exists $ret{ 'name' } ) {
80     push( @c, \%ret );
81   }
82 }
83
84 open( F, ">" . ($ARGV[1] || "jquery-docs-json.js") );
85 print F Dumper( \@c );
86 close( F );
87
88 $Data::Dumper::Indent = 0;
89
90 open( F, ">" . ($ARGV[2] || "jquery-docs-jsonp.js") );
91 print F "docsLoaded(" . Dumper( \@c ) . ")";
92 close( F );