Changeset 11981


Ignore:
Timestamp:
07/24/10 19:42:37 (19 months ago)
Author:
azawawi
Message:

Removed HTML formatting from method descriptions and converted C++ constructor to their Perl equivalent. The generated wxwidgets.pod looks like:
=head1 Wx::class_name
=head2 Wx::class_name::method_name
...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/parse_wxwidgets_docs.pl

    r11962 r11981  
    1010use HTTP::Request    (); 
    1111use Archive::Extract (); 
     12use HTML::Parse      qw(parse_html); 
     13use HTML::FormatText (); 
    1214 
    1315my $WX_WIGDETS_HTML_ZIP = 'wxWidgets-2.8.10-HTML.zip'; 
     
    2527print "Found " . @wxclasses . " Wx Classes to parse\n"; 
    2628 
    27 # Step 4: Process all Wx classes gathering information 
    28 my $func = {}; 
    29 foreach my $wxclass (@wxclasses) { 
    30     my $file = File::Spec->join($wx_dir, $wxclass->{file}); 
    31     my $class = $wxclass->{class}; 
    32     print "Processing $class...\n"; 
    33      
    34     if(open my $fh, '<', $file) { 
    35         my $begin_block = 0; 
    36         my $buffer = ''; 
    37         my $name; 
    38         while(my $line = <$fh>) { 
    39             if($line =~ /<HR>/) { 
    40                 $begin_block = 1; 
    41                 $buffer = ''; 
    42             } elsif($begin_block && $line =~ /<H3>(.+?)<\/H3>/) { 
    43                 $name = $1; 
    44                 $name =~ s/wx(.+?)/Wx::$1/; 
    45             } elsif($line =~ /^\s*$/) { 
    46                 $begin_block = 0; 
    47                 if($name) { 
    48                     $func->{$name} = $buffer; 
    49                 } 
    50                 $name = undef; 
    51             } else { 
    52                 $buffer .= $line; 
    53             } 
    54         } 
    55     } 
    56 } 
     29# Step 4: Write the final POD while processing all html files 
     30write_pod($wx_dir, @wxclasses); 
    5731 
    58 # Step 5: Write the final POD 
    59 my $pod_file = 'wxwidgets.pod'; 
    60 print "Writing $pod_file\n"; 
    61 if(open(my $fh, '>', 'wxwidgets.pod')) { 
    62     foreach my $name (keys %$func) { 
    63         my $desc = $func->{$name}; 
    64         print $fh "=head1 $name\n$desc\n\n"; 
    65     } 
    66 } else { 
    67     die "Couldnt write $pod_file\n"; 
    68 } 
     32# and we're done 
    6933exit; 
    7034 
     
    13195                my ($file, $class) = ($1, $2); 
    13296                $class =~ s/wx(.+?)/Wx::$1/; 
    133                 push @wxclasses, { "file" => $file, "class" => $class }; 
     97                push @wxclasses, { file => $file, class => $class }; 
    13498            } 
    13599        } 
     
    139103 
    140104    return @wxclasses; 
     105} 
     106 
     107# 
     108# Writes wxwidgets.pod... :) 
     109# 
     110sub write_pod { 
     111    my ($wx_dir, @wxclasses) = @_; 
     112    my $pod_file = 'wxwidgets.pod'; 
     113    print "Writing $pod_file\n"; 
     114    if(open(my $pod, '>', 'wxwidgets.pod')) { 
     115        my $oldclass; 
     116        foreach my $wxclass (@wxclasses) { 
     117            my $file = File::Spec->join($wx_dir, $wxclass->{file}); 
     118            my $class = $wxclass->{class}; 
     119            print "Processing $class...\n"; 
     120             
     121            if(open my $html_file, '<', $file) { 
     122                my $desc = ''; 
     123                my $name; 
     124                while(my $line = <$html_file>) { 
     125                    if($line =~ /<H3>(.+?)<\/H3>/) { 
     126                        $name = $1; 
     127                        $name =~ s/wx(.+?)/Wx::$1/; 
     128                        if($name =~ /^Wx::(.+?)::(.+?)$/) { 
     129                            if($2 eq "wx$1") { 
     130                                # C++ constructor... convert to Perl ::new 
     131                                $name = "$class\:\:new" 
     132                            } 
     133                        } 
     134                        $desc = ''; 
     135                    } elsif($line =~ /^\s*$/) { 
     136                        if($name) { 
     137                            if(!$oldclass || $class ne $oldclass) { 
     138                                # print out new class header 
     139                                print $pod "=head1 $class\n\n"; 
     140                                $oldclass = $class; 
     141                            } 
     142 
     143                            # print out method description 
     144$desc = HTML::FormatText->new->format(parse_html($desc)); 
     145                            print $pod "=head2 $name\n$desc\n"; 
     146 
     147                            $name = undef; 
     148                        } 
     149                    } else { 
     150                        $desc .= $line; 
     151                    } 
     152                } 
     153                close $html_file; 
     154            } 
     155        } 
     156        close $pod; 
     157    } else { 
     158        die "Couldnt write $pod_file\n"; 
     159    } 
     160 
    141161} 
    142162 
Note: See TracChangeset for help on using the changeset viewer.