[Gambas-user] another reason I love Gambas

Rob sourceforge-raindog2 at ...94...
Fri Jun 6 19:35:16 CEST 2003


I just added all the documentation for all of the component class members to 
the wiki in about 10 minutes by hacking the Gambas IDE source to do most of 
the work for me ;)

In the FExplorer class I added

PUBLIC avc AS File

to the beginning and 

TRY KILL "/tmp/gambasdoc/" & aKey[1] & "." & akey[2] & ".txt"
TRY OPEN "/tmp/gambasdoc/" & aKey[1] & "." & akey[2] & ".txt" FOR CREATE AS 
#avc
TRY PRINT #avc, "<TABLE CELLPADDING=4 CELLSPACING=0 BORDER=0 BGCOLOR=#C0C0C0 
WIDTH=100%><TR><TD>" & sTitle & "</TD></TR></TABLE><BR>" & sDesc
TRY CLOSE #avc

to the end of the RefreshInfo sub in that class.  Then I hit F5, loaded a 
random project I had laying around, hit F2, and cursored through the entire 
list of component classes while it dumped HTML files for each class member to 
a directory in /tmp.  I paused after each component to move them into a 
subdirectory and when I was done, ran the following Perl script to integrate 
them with the class documentation I'd already extracted and wikify the lot (I 
would have used Gambas again but I don't know how to do regular expressions 
in Gambas ;) ):

#!/usr/bin/perl
for $f (`find`) {
    next if $f =~ m|/children/|;
    next if $f =~ m|/classes/|;
    next unless $f =~ /\.txt$/;
    chomp $f;
    $g = `cat $f`;
    $basename = $f;
    $basename =~ s/.txt$//;

    # convert filenames to wiki words
    $f =~ s/\//-/g;
    $f =~ s/^\.-//;
    $f =~ s/\[\]/Array/;
    $f =~ s/^gb-/GambasComponentGb/;
    $f =~ s/^gb.eval-/GambasComponentEval/;
    $f =~ s/^gb.db-/GambasComponentDb/;
    $f =~ s/^gb.qt-/GambasComponentQt/;
    $f =~ s/^gb.qt.ext-/GambasComponentQtExt/;
    $f =~ s/^gb.qt.kde-/GambasComponentQtKde/;
    $f =~ s/^gb.qt.editor-/GambasComponentQtEditor/;
    $f =~ s/\.//g;
    $f =~ s/txt$/.txt/;

    # convert HTML content to wiki text
    $g .= `cat children/$basename* 2>/dev/null`;
    $g =~ s/<i>\s*(.+?)\s*<\/i>/ _$1\_ /gi;
    $g =~ s/<b>\s*(.+?)\s*<\/b>/ \*$1\* /gi;
    $g =~ s/<h1>\s*(.+?)\s*<\/h1>/\n---+$1/is;
    $g =~ s/<h1>\s*(.+?)\s*<\/h1>/\n---++<nop>$1/gis;
    $g =~ s/<h2>\s*(.+?)\s*<\/h2>/\n---++<nop>$1/gsi;
    $g =~ s/<br>/\n/gsi;
    $g =~ s|/usr/lib/control|/gambas-wiki/images|gis;
    $g =~ s|<IMG SRC="img/16/finger.png">|\n   * |gis;
    $g =~ s/<\/?table.*?>/\n/gis;
    $g =~ s/<\/?font.*?>//gis;
    $g =~ s/<\/?tr.*?>/\n/gis;
    $g =~ s/<\/?td.*?>/\n/gis;
    $g =~ s/<p.*?>/\n\n/gis;
    $g =~ s/<h3>\n/\n/gis;
    $g =~ s/<h3>\s*(.+?)\s*<\/h3>/\n---+++<nop>$1/gi;
    $g =~ s/\n\n+/\n\n/gis;
    $g =~ s/^\n+//gis;
    $g =~ s/<\/h3>//gis;

    open OUT, ">fixed/$f";
    print OUT $g;
    close OUT;
    print "$f\n";
}

And finally I scp'ed the whole thing up to the wiki.  So now we have a 
searchable, easily updated reference to all the component class members in 
the same format as the rest of the language.

Try doing that in VB!

Rob





More information about the User mailing list